[解決済み] self.xxxxをデフォルトのパラメータとして使用する - Python
2023-08-29 21:50:16
質問
私は宿題のひとつを単純化し、コードを少し良くしようとしています。私が取り組んでいるものは、バイナリ検索ツリーです。今、私は私の中の関数を持っています
Tree()
クラスに関数があり、すべての要素を見つけてリストに入れます。
tree = Tree()
#insert a bunch of items into tree
で、makeList()関数を使って、ツリーからすべてのノードを取り出して、リストに格納しています。
この関数を呼び出すには
makeList()
関数を呼び出すには、次のようにします。
tree.makeList(tree.root)
. 私には、これは少し繰り返しに見えます。私はすでにツリーオブジェクトを
tree.
でツリーオブジェクトを呼び出しているので
tree.root
はちょっとしたタイピングの無駄でしかありません。
今現在のmakeListの関数は。
def makeList(self, aNode):
if aNode is None:
return []
return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)
のように、aNodeの入力をデフォルトのパラメータにしたい。
aNode = self.root
(これは動作しません)そうすれば、私はこれで関数を実行することができます。
tree.makeList()
.
最初の疑問は、なぜそれがうまくいかないのか、ということです。
第二の質問は、それが機能する方法があるかどうかです。ご覧のように
makeList()
関数は再帰的なので、関数の最初に何かを定義することはできませんし、無限ループになります。
EDIT 要求されたすべてのコードはここにあります。
class Node(object):
def __init__(self, data):
self.data = data
self.lChild = None
self.rChild = None
class Tree(object):
def __init__(self):
self.root = None
def __str__(self):
current = self.root
def isEmpty(self):
if self.root == None:
return True
else:
return False
def insert (self, item):
newNode = Node (item)
current = self.root
parent = self.root
if self.root == None:
self.root = newNode
else:
while current != None:
parent = current
if item < current.data:
current = current.lChild
else:
current = current.rChild
if item < parent.data:
parent.lChild = newNode
else:
parent.rChild = newNode
def inOrder(self, aNode):
if aNode != None:
self.inOrder(aNode.lChild)
print aNode.data
self.inOrder(aNode.rChild)
def makeList(self, aNode):
if aNode is None:
return []
return [aNode.data] + self.makeList(aNode.lChild) + self.makeList(aNode.rChild)
def isSimilar(self, n, m):
nList = self.makeList(n.root)
mList = self.makeList(m.root)
print mList == nList
どのように解決するのですか?
ラースマン 回答済み 最初の質問
2番目の質問については、再帰を避けるために、跳ぶ前に見ることができますか?
def makeList(self, aNode=None):
if aNode is None:
aNode = self.root
treeaslist = [aNode.data]
if aNode.lChild:
treeaslist.extend(self.makeList(aNode.lChild))
if aNode.rChild:
treeaslist.extend(self.makeList(aNode.rChild))
return treeaslist
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Python 言語を決定するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Pythonでファイルの読み込みと上書きをする