一个非常简单的for循环

时间:2011-11-11 12:05:17

标签: python for-loop

为什么这样:

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"

打印没有结果?

3 个答案:

答案 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)

要回答这个问题,我们确实需要了解readerempsTbl的更多信息。但有一种可能性让我想起reader是一个发电机。在这种情况下,在内部循环中迭代它不起作用,因为生成器在外部循环的第一次迭代中耗尽,使内部循环为空我将是外部循环的所有后续迭代。

答案 2 :(得分:0)

如果empsTblreader是不同的列表,并且包含不同类型的元素,则j[0]i[0]最有可能是不同的内容。

这应该可以解释其中的差异,比如“混合橙子和苹果”的旧故事。

但当然,这只是答案的一部分,因为我们只能看到部分问题; o)