为什么这样:
for i in reader:
for j in empsTbl:
if i[0] == j.inmptl_wiw_userid:
print "Match"
打印超过500个结果
而且:
for i in empsTbl:
for j in reader:
if j[0] == i.inmptl_wiw_userid:
print "Match"
打印没有结果?
答案 0 :(得分:8)
看起来您的reader
是一个生成器,只能读取一次。也许是文件阅读器?
在第一种情况下,您只阅读一次并将每个值与empsTbl
的所有元素进行比较,这显然是一个列表(或元组或集合或字典,即可以根据需要读取)。
在第二种情况下,你在empsTbl
的第一项时完全阅读(如果没有打印则显然不匹配),然后使用第二项empsTbl
则不能再次阅读(即文件已被阅读)。
UPDATE :有了这么多的记录,你可以将所有内容复制到Python列表中,这些列表可以反复迭代(set / dictionary可能会更好,因为它们可以提供更快的查找时间)
也许是这样的:
readerSet = set(i[0] for i in reader)
for j in empsTbl:
if j.inmptl_wiw_userid in readerSet:
print "Match"
答案 1 :(得分:0)
要回答这个问题,我们确实需要了解reader
和empsTbl
的更多信息。但有一种可能性让我想起reader
是一个发电机。在这种情况下,在内部循环中迭代它不起作用,因为生成器在外部循环的第一次迭代中耗尽,使内部循环为空我将是外部循环的所有后续迭代。
答案 2 :(得分:0)
如果empsTbl
和reader
是不同的列表,并且包含不同类型的元素,则j[0]
和i[0]
最有可能是不同的内容。
这应该可以解释其中的差异,比如“混合橙子和苹果”的旧故事。
但当然,这只是答案的一部分,因为我们只能看到部分问题; o)