2024-10-04 11:33:36 发布
网友
为什么会这样:
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"
不打印结果?你知道吗
看起来您的reader是一个生成器,只能读取一次。也许是文件读取器?你知道吗
reader
在第一种情况下,只读取一次,然后将每个值与empsTbl的所有元素进行比较,这显然是一个列表(或者tuple、set或dict,也就是说,可以读取任意多的值)。你知道吗
empsTbl
在第二种情况下,您在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"
如果empsTbl和reader是不同的列表,并且包含不同类型的元素,那么j[0]和i[0]很可能是不同的东西。你知道吗
j[0]
i[0]
这应该可以解释这种区别,就像“混合橙子和苹果”的老故事。你知道吗
当然,这只是答案的一部分,因为我们只能看到问题的一部分;o)
要回答这个问题,我们真的需要更多地了解reader和empsTbl是什么。但我突然想到的一种可能性是reader是一个生成器。在这种情况下,在内环中对它进行迭代是不起作用的,因为生成器在外循环的第一次迭代中已耗尽,而使内环为空,即所有外循环的后续迭代。你知道吗
看起来您的
reader
是一个生成器,只能读取一次。也许是文件读取器?你知道吗在第一种情况下,只读取一次,然后将每个值与
empsTbl
的所有元素进行比较,这显然是一个列表(或者tuple、set或dict,也就是说,可以读取任意多的值)。你知道吗在第二种情况下,您在
empsTbl
的第一个项目处完全读取它(如果没有打印任何内容,则显然与它不匹配),然后在empsTbl
的第二个项目处无法再次读取它(即,文件被读取)。你知道吗更新:有了这些记录,您可以将所有内容复制到Python列表中,这些列表可以反复迭代(set/dictionary可能更好,因为它们提供了更快的查找时间)
可能是这样的:
如果
empsTbl
和reader
是不同的列表,并且包含不同类型的元素,那么j[0]
和i[0]
很可能是不同的东西。你知道吗这应该可以解释这种区别,就像“混合橙子和苹果”的老故事。你知道吗
当然,这只是答案的一部分,因为我们只能看到问题的一部分;o)
要回答这个问题,我们真的需要更多地了解
reader
和empsTbl
是什么。但我突然想到的一种可能性是reader
是一个生成器。在这种情况下,在内环中对它进行迭代是不起作用的,因为生成器在外循环的第一次迭代中已耗尽,而使内环为空,即所有外循环的后续迭代。你知道吗相关问题 更多 >
编程相关推荐