python - 如果行 [0] 在行 [1] 中打印行

标签 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 列表中找到它,如果找到则打印。不看是否相邻并打印它。

最佳答案

当您说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 所做的事情,因此这更有意义。

关于python - 如果行 [0] 在行 [1] 中打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25630127/

相关文章:

python - 类字符串和打印函数

python - 使用 importlib 提升 python 子包

python - 如何使用追加对列表中的每个项目进行平方?

java - 在Java中过滤列表并将结果放入新的数组列表中

scala - 使用 scala 在 Spark 应用程序中构建倒排索引

python - Cython 将二进制文件读取为字符串并返回

python - res_similarity() 函数的参数

python - 检查列表项整数是否是 Python 中另一个列表中每两个项目整数之间的数字?

mysql - PostgreSQL 多个 CSV 导入并向每列添加文件名

json - Grails-渲染的Json文件太大,无法进行客户端操作