2014-09-28 84 views
-1

所以我一直在试图让这两个函数工作,当我做他们的工作,他们sepretly,但是当我结合使用elif函数的两个函数,它只运行第1功能和打印出位置列表,以及一个错误说“的neighbour_list没有定义”两个函数读取一个txt文件,使用elif

这是我的代码

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

那么你的功能在哪里? – Kasramvd 2014-09-28 13:14:00

+0

对不起,我还没有处理语言,我的意思是我的2个不同的循环获取position_list和neighbour_list – 13python 2014-09-28 13:16:17

+1

'else my_list [2] ==“”:'应该引发了一个SyntaxError。你是不是指“elif ...”? (或只是'else:'?) – unutbu 2014-09-28 13:16:53

回答

0

如果,对于每次通过循环,my_list[2] != ""为真,那么永远不会定义neighbour_list。然后

print("neigh",neighbour_list) 

会增加NameError: the neighbour_list is not defined


相反,进入for-loop之前定义neighbour_list。您还可以使用

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) 

您可能还需要使用一个图形库像networkxigraph

+0

是的,这是发生了什么,我将如何解决这个问题? – 13python 2014-09-28 13:22:27

+0

您必须为neighbour_list分配一个值。你没有说你的程序应该做什么,所以我们不能真正帮助。 – 2014-09-28 13:24:17

+0

你可以在'for-loop'之前的顶部附近为'neighbour_list'定义一个值。您可以将它设置为空列表或“无”,具体取决于程序在永远不会到达'elif-suite'时执行的操作。 – unutbu 2014-09-28 13:26:02