所以我一直试图让这两个功能起作用,当我这样做时,它们工作正常,但是当我使用elif函数组合这两个函数时,它只运行第一个函数并打印出位置列表,并且错误说" 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], []] 额外的空字符串,它不是假设在那里但在此之前一切都很好
答案 0 :(得分: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:
...
处理您希望接收的两种类型的行。
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)