我试图比较来自两个不同文件的列的数据。我试图使用for
,现在是list comprehension
。在
问题是外部的for循环没有被迭代,但是内部的循环是循环的。我已经单独检查过了,迭代就可以了;但是一旦我嵌套了,我就会遇到这个问题。我有什么遗漏吗?在
import csv
newInv = csv.reader(open("new.csv", "r"))
origInv = csv.reader(open("old.csv", "r"))
print [ oldrow[5] + " " + newrow[3] for oldrow in origInv for newrow in newInv ]
这里有两件事。在
1)你的列表理解有两次迭代。从概念上讲,您要求对每个
oldrow
重新迭代newInv
。在2)您没有看到(oldRow,newRow)的每一个组合的原因是
csv.reader
是一个流,因此只能迭代一次。在newInv
上的每个后续“迭代”都不会找到新的项,因为它们都在第一次“用完”。在要获得(旧行、新行)的每个组合,请首先从每个
csv.reader
中形成list
s(可以直接将它们传递给list
构造函数。在要获得(旧行、新行)的一个成对组合序列,
zip
将两个csv.reader
组合在一起。在请注意,在您的解决方案中,for循环是嵌套的,所以这就是为什么一个循环似乎在迭代,而另一个似乎没有。在
一次获取两个迭代器的一个元素需要使用
itertools.izip
:外部循环。但是,只对外循环的第一次迭代执行内循环-然后到达newInv的结尾。在
要明白
newInv
不是一个可以多次迭代的集合。它是一个只能使用一次的迭代器。尝试(未测试):它将把数据复制到内存中,并允许您进行多次迭代。在
相关问题 更多 >
编程相关推荐