Python - 用于循环等效的C程序

时间:2015-11-11 09:06:32

标签: python c

我在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):

怎么做?

2 个答案:

答案 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