我在C程序中使用了以下for
循环:
for (i = 0; i < 5; i++) {
for (j = i + 1; j < 5; j++) {
//some operation using the index values
}
}
第二个for
循环的python等价物是什么(j = i + 1
)?我尝试了以下但是有一个错误:
for indexi, i in enumerate(list):
for indexj = indexi + 1, j in enumerate(list):
怎么做?
答案 0 :(得分:6)
如果您因某种原因试图获取实际索引值(和/或需要将内部循环与外部分开控制),您可以这样做:
for i in range(len(mylist)):
for j in range(i+1, len(mylist)):
# Or for indices and elements:
for i, x in enumerate(mylist):
for j, y in enumerate(mylist[i+1:], start=i+1):
但如果您真正想要的是元素的唯一非重复配对,那么有更好的方法,itertools.combinations
:
import itertools
for x, y in itertools.combinations(mylist, 2):
获得价值,而不是指数,但通常是你真正想要的。如果你真的需要索引,你可以混合使用enumerate
:
for (i, x), (j, y) in itertools.combinations(enumerate(mylist), 2):
它可以获得您正在寻找的确切索引模式以及值。您还可以使用它来单独生成索引作为单个循环:
for i, j in itertools.combinations(range(len(mylist)), 2):
简短的回答:itertools
对于这样的事情来说是神奇的。
答案 1 :(得分:3)
如果您真的只对索引感兴趣,可以使用range
而不是enumerate
。
for i in range(5):
for j in range(i+1, 5):
print i, j