迭代数组两次(笛卡尔积),但只考虑一半的元素

Syl*_*inD 3 python combinations iterator python-itertools

我试图迭代一个数组两次以拥有元素对(e_i,e_j),但我只想要i <j的元素.

基本上,我想要的就像是C语言.

int my_array[N] = ...;
for (int i=0; i<N; i++)
        for (int j=i+1; j<N; j++)
                something(my_array[i],my_array[j]);
Run Code Online (Sandbox Code Playgroud)

我没有找到我在itertools中寻找的东西(我发现的最接近的东西itertools.product(*iterables[, repeat])).

我尝试了一些事情,但我并不相信他们中的任何一个:

my_list=range(10)

# Using enumerate and slices - explicit loop
res=[]
for i,j in enumerate(my_list):
        for k in my_list[i+1:]:
                res.append((j,k))
print res

# Using enumerate and slices - list comprehension
res=[(j,k) for i,j in enumerate(my_list) for k in my_list[i+1:]]
print res

# Using enumerate and xrange - explicit loop
res=[]
for i,j in enumerate(my_list):
        for k in range(i+1, len(my_list)):
                res.append((j,my_list[k]))
print res       

# Using enumerate and xrange - list comprehension
res=[(j,my_list[k]) for i,j in enumerate(my_list) for k in range(i+1, len(my_list))]
print res
Run Code Online (Sandbox Code Playgroud)

我仍然相信有更好更多的pythonic解决方案.任何建议都是受欢迎的.

Bre*_*arn 9

只是用itertools.combinations(my_list, 2).