我想要一个计数器来统计我已经完成了多少次迭代。 我这样做:
counter = 0;
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
counter += 1;
但我不禁要问有更多的pythonic方法吗?
答案 0 :(得分:4)
它简单易读,就像Pythonic一样(除了冒号外)。
如果您开始在这些循环中添加更多代码,我唯一的建议就是提供i
和j
个更具描述性的名称。
答案 1 :(得分:2)
我会说最pythonic的方法是记录i
和j
而不是count
,因为元组(i,j)
比count
具有更多的意义 - 您可以从(i,j)
计算计数!
for i, item in enumerate(items):
for j, anotheritem in enumerate(anotheritems):
where_i_am = (i,j)
# count = i*len(anotheritems) + j + 1
total_iterations = len(items) * len(anotheritems) # equivalently (i+1) * (j+1)
答案 2 :(得分:1)
for counter,ijpair in enumerate(itertools.product(enumerate(items),enumerate(other))):
i,j = ijpair
//... do stuff
正如Codemonkey所指出的那样,我们并没有在这里增加可读性,而且对于明确使用的说法,它并不是真正的改进。但是,enumerate和itertools.product表达式都是生成器/迭代器,因此可以将它们传递给其他函数,例如map,以便在那里使用。因此,您可以过滤项目和其他项目的相同值:
allelements = itertools.product(items, others)
sameys = itertools.ifilter(lambda a: a[0]==a[1], allelements)
现在sameys与allelements
具有完全相同的结构。关键是整个可迭代集成为迭代器表达式,而不是循环结构,可以更容易地传递。