2024-09-30 20:26:29 发布
网友
我需要一个计数器来计算我总共做了多少次迭代。 我知道:
counter = 0; for i, item in enumerate(items): for j, anotheritem in enumerate(anotheritems): counter += 1;
但我不禁要问,有没有更像Python的方法?在
它简单易读,就像Python一样(除了分号)
我唯一的建议是,如果您开始在这些循环中放入更多代码,那么就给i和{}更多的描述性名称。在
i
我想说最具python风格的方法是记录i和{},而不是{},因为元组(i,j)比count有更多的意义-你可以从(i,j)计算计数!在
(i,j)
count
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值相同的位置:
现在sameys的结构与allelements完全相同。关键是整个iterable集变成了一个迭代器表达式,而不是一个循环构造,这样可以更容易地传递。在
allelements
它简单易读,就像Python一样(除了分号)
我唯一的建议是,如果您开始在这些循环中放入更多代码,那么就给}更多的描述性名称。在
i
和{我想说最具python风格的方法是记录},而不是{},因为元组
i
和{(i,j)
比count
有更多的意义-你可以从(i,j)
计算计数!在正如Codemonkey指出的,我们并没有增加可读性,而且对于明确的用途来说,这并不是真正的改进。但是,枚举和itertools.product表达式都是生成器/迭代器,因此可以将它们传递给其他函数(如map)以便在其中使用。因此,您可以筛选出item和otheritem值相同的位置:
^{pr2}$现在sameys的结构与
allelements
完全相同。关键是整个iterable集变成了一个迭代器表达式,而不是一个循环构造,这样可以更容易地传递。在相关问题 更多 >
编程相关推荐