2015-10-13 56 views
0

下面是我的代码将我的列表分隔成列表的列表,然后打印单词'你好',如果这些列表中的值匹配...但是,在解决这个问题时遇到了一些问题。据我所知,所有的语法都是正确的,只是输出不起作用。为和如果/ else循环嵌套if语句不工作在python

import csv 
import operator 
import itertools 
import matplotlib.pyplot as plt 

with open('data.txt', 'r') as f: 
    csv_input = csv.reader(f, delimiter=' ', skipinitialspace=True) 
    headers = next(csv_input) 

    counter = 0 
    i = 1 

    for k, g in itertools.groupby(csv_input,key=operator.itemgetter(3)): 
     row = [] 
     for entry in g: 
      entry = [float(e) for e in entry] 
      row.append(entry) 
     counter = counter+1 
     i = i+1 
     #print(row) #(not necessary to see the results hence commented out) 
     if counter == 1: 
      row1 = row 
     else: 
      row2 = row 
      for i in range(1, len(row1)):   
       hi = row1[i][0] 
      for j in range(1,len(row2)): 
       if row2[j][0] == hi:  #this clause doesnt work 
        print('hello') 
      counter=1 
      row1=row 

我在这里做的是比较第一个列表中的第一个值和下一个列表的第一个行中的第二个值。然后,我想比较第二个列表第一行的第一个值与下一个列表的第一行,等等......(我知道这看起来很混乱!),如果这些值相同,那么它将绘制一条线,但为了简单起见,让我们只是说它会打印('你好'),因为代码工作直到它标记为'#这个子句不起作用'

任何帮助将不胜感激!在此先感谢

+0

您可以提供输入文件的示例 – The6thSense

+0

您循环遍历'row1'的所有元素,每次首先重新分配给'hi'。 'hi'在循环结束时总是'row1 [-1] [0]'。 – dsh

回答

0

然后,我想比较从第二个列表的第一行第一个值,下表的第一行,依此类推......

听起来像是你想要同时迭代ij。现在,您正在迭代i,然后停止,然后遍历j。尝试使用zip

更换

 for i in range(1, len(row1)):   
      hi = row1[i][0] 
     for j in range(1,len(row2)): 
      if row2[j][0] == hi: 
       print('hello') 

随着

 for i, j in zip(range(1, len(row1)), range(1,len(row2))): 
      hi = row1[i][0] 
      if row2[j][0] == hi: 
       print('hello') 

而且,不知道这是否是有意还是无意 - 启动range1意味着你开始看每个列表的元素,而不是第一个。如果您想遍历整个列表,请使用range(len(row1))range(len(row2))

+0

非常感谢你!这似乎是更好的方法来做到这一点。然而,我仍然没有得到任何输出比'runfile('/ Users /名称/桌面/ matrices1.py',wdir ='/用户名/桌面')' ,这是无意的,所以谢谢! – lyche

+0

我发现我出错的地方..如果使用你的方法,如果row2 [j] [1] ==嗨,而不是row2 [j] [0] ==嗨 – lyche

+0

很高兴听到它:-) – Kevin