在嵌套for循环中获取迭代计数器

2024-09-30 20:26:29 发布

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

我需要一个计数器来计算我总共做了多少次迭代。 我知道:

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

但我不禁要问,有没有更像Python的方法?在


Tags: 方法inforcounter计数器itemsitemenumerate
3条回答

它简单易读,就像Python一样(除了分号)

我唯一的建议是,如果您开始在这些循环中放入更多代码,那么就给i和{}更多的描述性名称。在

我想说最具python风格的方法是记录i和{},而不是{},因为元组(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指出的,我们并没有增加可读性,而且对于明确的用途来说,这并不是真正的改进。但是,枚举和itertools.product表达式都是生成器/迭代器,因此可以将它们传递给其他函数(如map)以便在其中使用。因此,您可以筛选出item和otheritem值相同的位置:

^{pr2}$

现在sameys的结构与allelements完全相同。关键是整个iterable集变成了一个迭代器表达式,而不是一个循环构造,这样可以更容易地传递。在

相关问题 更多 >