将迭代计数器置于嵌套以进行循环



我想要一个计数器来保持计数我总共完成了多少次迭代。我愿意:

counter = 0;
for i, item in enumerate(items):
    for j, anotheritem in enumerate(anotheritems):
        counter += 1;

但是我不禁要问有更多的pythonic方法吗?

它很简单且可读性,它的pythonic和它得到了(除了半彩色外)。)

我唯一的建议是如果您开始将更多代码放入这些循环中,请给出ij更多描述性名称。

我要说的是pythonic的方法是记录 ij而不是 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)
for counter,ijpair in enumerate(itertools.product(enumerate(items),enumerate(other))):
    i,j = ijpair
    //... do stuff

正如CodeMonkey指出的那样,我们在这里没有提高可读性,并且为了明确说明,这并不是真正的改进。但是,枚举和iTertool。产品表达式都是生成器/迭代器,因此它们可以传递给其他功能,例如在那里使用的MAP。因此,您可以在任何何处过滤和其他列的值相同的值:

allelements = itertools.product(items, others)
sameys = itertools.ifilter(lambda a: a[0]==a[1], allelements)

现在,Sameys具有与allelements完全相同的结构。关键是整个峰值集成为迭代器的表达式,而不是成为循环结构,可以更容易地传递。

最新更新