-1

次のエッジのリストを指定すると、グラフ内の個別のノードを出力しようとしています。

def find_nodes(graph):
    # get the distinct nodes from the edges
    nodes = []
    l = len(graph)
    for i in range(l):
        edge = graph[i]
        n1 = edge[0]
        n2 = edge[1]
        if n1 not in nodes:
            nodes.append(n1)
        if n2 not in nodes:
            nodes.append(n2)
    return nodes

graph = ((1,2),(2,3), (3,1))
print find_nodes(graph)

しかし、私は(1,2)どのように欠けているの3ですか?

4

2 に答える 2

2

挿入したテキストを見ると、左側の空白としてタブとスペースが混在しているように見えます。

これは、各行の repr を見ることで確認できます。

'    def find_nodes(graph):'
'        # get the distinct nodes from the edges'
'        nodes = []'
'        l = len(graph)'
'        for i in range(l):'
'        \tedge = graph[i]'
'        \tn1 = edge[0]'
'        \tn2 = edge[1]'
'        \tif n1 not in nodes:'
'        \t\tnodes.append(n1)'
'        \tif n2 not in nodes:'
'        \t\tnodes.append(n2)'
'    \treturn nodes'

これにより、行が意図したレベルにインデントされない場合があります。入力をコピーしてコンソールに貼り付けた結果として得られるものは次のとおりです。

>>> s = """
...     def find_nodes(graph):
...         # get the distinct nodes from the edges
...         nodes = []
...         l = len(graph)
...         for i in range(l):
...             edge = graph[i]
...             n1 = edge[0]
...             n2 = edge[1]
...             if n1 not in nodes:
...                     nodes.append(n1)
...             if n2 not in nodes:
...                     nodes.append(n2)
...             return nodes
...     
...     graph = ((1,2),(2,3), (3,1))
...     print find_nodes(graph)
... 
... """

return nodes行が実行されるのが早すぎるように見えます。コードをファイルに書き込み、python -ttオプションを使用して空白の問題をチェックします。

于 2012-07-15T20:01:42.433 に答える
0

私にとってもうまくいきます。

set を使用した、おそらくより Pythonic な形式:

def find_nodes(graph):
    return list({element
                 for edge in graph
                 for element in edge})
于 2012-07-15T19:46:20.057 に答える