一个非常简单的for循环

2024-10-04 11:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么会这样:

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"

不打印结果?你知道吗


Tags: inforifmatchreaderprintuseridempstbl
3条回答

看起来您的reader是一个生成器,只能读取一次。也许是文件读取器?你知道吗

在第一种情况下,只读取一次,然后将每个值与empsTbl的所有元素进行比较,这显然是一个列表(或者tuple、set或dict,也就是说,可以读取任意多的值)。你知道吗

在第二种情况下,您在empsTbl的第一个项目处完全读取它(如果没有打印任何内容,则显然与它不匹配),然后在empsTbl的第二个项目处无法再次读取它(即,文件被读取)。你知道吗

更新:有了这些记录,您可以将所有内容复制到Python列表中,这些列表可以反复迭代(set/dictionary可能更好,因为它们提供了更快的查找时间)

可能是这样的:

readerSet = set(i[0] for i in reader)

for j in empsTbl:
    if j.inmptl_wiw_userid in readerSet:
        print "Match"

如果empsTblreader是不同的列表,并且包含不同类型的元素,那么j[0]i[0]很可能是不同的东西。你知道吗

这应该可以解释这种区别,就像“混合橙子和苹果”的老故事。你知道吗

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

要回答这个问题,我们真的需要更多地了解readerempsTbl是什么。但我突然想到的一种可能性是reader是一个生成器。在这种情况下,在内环中对它进行迭代是不起作用的,因为生成器在外循环的第一次迭代中已耗尽,而使内环为空,即所有外循环的后续迭代。你知道吗

相关问题 更多 >