-1

だから私はこれらの2つの関数を機能させようとしてきましたが、別々に実行すると機能しますが、elif関数を使用して2つの関数を組み合わせると、最初の関数のみが実行され、位置リストが出力され、エラーが表示されます」 neighbour_list が定義されていません」

これは私のコードです

 my_file=open("test_graph_1.txt","r")
 x=[]
 y=[]
 nodenumber=[]
 positionx=[]
 positiony=[]


for row in my_file:

    value=row[:-1]

    my_list=value.split(",")

    if len(my_list)==3:
        nodenumber.append(int(my_list[0]))

        positionx.append(int(my_list[1]))
        positiony.append(int(my_list[2]))

        nodenumber1 =[(nodenumber[a],positionx[a],positiony[a]) for a i range(len(nodenumber))]
        position_list=tuple(nodenumber1)




    elif len(my_list)==2:
        x.append(int(my_list[0]))
        y.append(int(my_list[1]))

        l1 = [(x[i] , y[i]) for i in range(len(x))]
        l2 = [(y[i] , x[i]) for i in range(len(x))]
        l1.extend(l2)
        neighbour_list=[[l[0] for l in l1 if l[1] == j] for j in range(len(x))]


 print("position_list",position_list)
 print("neigh",neighbour_list)

しかし、コードを印刷すると、位置リストは正常に表示されますが、neighbour_list は次のようになります:[[4, 1], [0, 4, 2], [1, 3], [2, 5, 4], [ 3, 0, 1], [3], []] 余分な空の文字列。そこにあるとは想定されていませんが、その前は問題ありません

4

1 に答える 1

0

ループを通過するたびにmy_list[2] != ""True の場合、neighbour_listは定義されません。それで

print("neigh",neighbour_list)

を上げますNameError: the neighbour_list is not defined


neighbour_list代わりに、 を入力する前に定義してfor-loopください。使用することもできます

if len(my_list) == 3:
    ...
elif len(my_list) == 2:
    ...
else:
    ...

受信すると予想される 2 種類の回線を処理します。


N = 5
position_list = list()
neighbour_list = [list() for j in range(N)]

with open("test_graph_1.txt","r") as my_file:
    for row in my_file:
        try:
            my_list = map(int, row.split(','))
        except ValueError:
            # Choose how to handle malformed lines
            print('invalid line: {!r}'format(row))
            continue
        if len(my_list) == 3:
            nodenumber, positionX, positionY = my_list
            position_list.append(tuple([nodenumber,positionX,positionY]))
        elif len(my_list) == 2:
            nodenumber1, nodenumber2 = my_list
            neighbour_list[nodenumber1].append(nodenumber2)
            neighbour_list[nodenumber2].append(nodenumber1)            
        else:
            # Choose how to handle lines with more than 3 or less than 2 items
            continue

print(position_list)
print("neigh", neighbour_list)

networkxigraphなどのグラフ ライブラリを使用することもできます。

于 2014-09-28T13:19:43.603 に答える