for和if / else循环嵌套if语句在python中不起作用

时间:2015-10-13 12:41:20

标签: python list loops nested

下面是我的代码,将我的列表分成列表列表,然后打印单词' hello'如果这些列表中的值匹配......但是我在运行时遇到了一些问题。据我所知,所有语法都是正确的,它只是输出不起作用。

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

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

任何帮助将不胜感激!提前致谢

1 个答案:

答案 0 :(得分: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')

另外,不确定这是否是故意的 - 在range开始1意味着您开始查看每个列表的第二个元素,而不是第一。如果要迭代完整列表,请使用range(len(row1))range(len(row2))