首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果row[1]打印行中有row[0]

如果row[1]打印行中有row[0]
EN

Stack Overflow用户
提问于 2014-09-03 02:41:11
回答 1查看 25.8K关注 0票数 1

我有一个有2列的csv文件。我只是想知道是否每个row[0]值都在某个row[1]中,如果是,就打印row

csv文件中的项目:

代码语言:javascript
复制
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

代码:

代码语言:javascript
复制
import csv
doc= csv.reader(open('file.csv','rb'))

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

最终结果应该是:

代码语言:javascript
复制
1-A
1-B
2-A
2565
51Bc
55
3

相反,它给了我:

代码语言:javascript
复制
1-A
2565
51Bc

它打印这些数字,因为它们是并排的,但我需要它做的是获取COL1中的第一项,看看它是否在整个COL2列表中找到它,如果找到了,就打印它。不看它是不是在旁边,然后打印出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 02:50:24

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

代码语言:javascript
复制
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所做的,所以这样做更有意义。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25630127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档