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

我试图迭代一个数组两次以获得元素对(e_i,e_j),但我只想要这样的元素,即i<学家 基本上,我想要的就像是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]);

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

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

解决方法:

只需使用itertools.combinations(my_list,2).

上一篇:在Perl中有类似Python Itertools的东西吗?


下一篇:删除2D列表中的连续重复项,python?