2

私はPythonのかなり新しいプログラマーで、リンクされたリストを反復処理するのに問題があります。これは、私が使用している他のソフトウェア (私には変更する能力がありません) の出力として与えられたリンク リストであり、アクセスする必要があるパラメーター (参照用にここでは my_parameter と呼ばれています) が含まれています。ここでの参照用に、リンクされたリストに sim_table という名前を付けました。反復を試みるために使用しているコードのスニペットは次のとおりです。

sim_table_rows = []
def iterate_linked_list(node):
    while node is not None:
        sim_table_rows.append(node.my_parameter)
        node = node.next

iterate_linked_list(sim_table)

これは、すべてをテストする場所である ipython で正常に動作しますが、ipython の外部でスクリプトを実行しようとすると、セグメンテーション違反が発生し続けます: 11. 問題を診断するために、追加する代わりに出力を印刷してみました:

def iterate_linked_list(node):
    while node is not None:
        print node.my_parameter
        node = node.next

iterate_linked_list(sim_table)

私が得た出力は、リストの最後のノードからの my_parameter の無限ループですが、その理由はわかりません。また、ipython で存在しないノードを反復しようとするとどうなるかを確認するために、ノードが 2 つしかないテスト sim_table を作成しました。

In [10]: test_sim_table.next.next.my_parameter
AttributeError: 'NoneType' object has no attribute 'my_parameter'

したがって、None の代わりに属性エラーが発生します。これは、私が期待していたものです。簡単なものがありませんか?私はこれらすべてにかなり慣れていないので、おそらく. 助けてくれてありがとう!

4

4 に答える 4

3

リンクされたリストをどこまで進めますか?

sim_table_rows = []
def iterate_linked_list(node):
    while node is not None:
        sim_table_rows.append(node.my_parameter)
        node = node.NEXT_NODE # Change node to next one...

NEXT_NODEそれが次のノードへの参照を含む属性であると仮定します。

于 2013-10-17T00:07:39.113 に答える
0

リンクされたリストが、それ自体を参照するノードによって終了している可能性があります。

def iterate_linked_list(node):
    if node is not None:  # non-empty list?
        while True:
            print node.my_parameter
            if node.next is node:  # end of list?
                break
            node = node.next
于 2013-10-17T01:53:18.143 に答える