如果行[1]中的行[0]打印行

时间:2014-09-02 18:41:11

标签: python list csv for-loop

我有一个包含2列的csv文件。我只是想弄清楚每个row[0]值是否在某个row[1]中,如果是,则打印row

csv文件中的项目:

COL1,   COL2
1-A,    1-A
1-B,    2-A
2-A,    1-B
2565,   2565
51Bc,   51Bc
5161,   56
811,    65
681,    11
55,     3
3,      55

代码:

import csv
doc= csv.reader(open('file.csv','rb'))

for row in doc:
    if row[0] in row[1]:
        print row[0]

最终结果应为:

1-A
1-B
2-A
2565
51Bc
55
3

相反,它给了我:

1-A
2565
51Bc

它会打印这些数字,因为它们并排放在一起,但我需要它做的是获取COL1中的第一项,看它是否在整个COL2列表中找到它并打印出来。不知道它是否在彼此旁边并打印出来。

1 个答案:

答案 0 :(得分:3)

当你说for row in doc时,它只获得一对元素并将它们放入row。因此,row[1]无法在任何时间点保存整个列。您需要执行初始循环以将该列作为列表,然后再次遍历csv文件以进行比较。实际上,您可以将两个列存储在单独的列表中,只需打开一次文件。

import csv
doc= csv.reader(open('file.csv','rb'))

# Build the lists.
first_col = []
second_col = set()
for row in doc:
    first_col.append(row[0])
    second_col.add(row[1])

# Now actually do the comparison.
for item in first_col:
    if item in second_col:
        print item

根据abarnert的建议,我们在第二列使用set()set已针对查找其中的值进行了优化,这就是我们正在使用的所有内容。 list已针对循环遍历每个元素进行了优化,这就是我们对first_col的处理方式,因此在那里更有意义。