Python,组合,排列没有重复

时间:2014-11-27 11:19:58

标签: python optimization combinations combinatorics itertools

的Python。我有两个列表,长度相同。这个想法是建立配对数据(用于回归分析)。我想出了循环,它看起来像这样。

a=(1,3,5,7)   #first list
b=(2,4,6,10)  #second list
w=zip(a,b)    #paired values from both lists

i=0
j=0
for each in w:
    x= w[i]
    for that in xrange(i,len(w)-1):
        i+=1
        print x, w[i]
    j+=1
    i=j

输出是我所期望的 - 第一对与第二对,第三对......等等,然后第二对与第三对,第四对等等(跳过第二对和第一对之间的组合,因为它是有点像第一对和第二对的组合......)

(1, 2) (3, 4)
(1, 2) (5, 6)
(1, 2) (7, 10)
(3, 4) (5, 6)
(3, 4) (7, 10)
(5, 6) (7, 10) [..] and so on as I was expecting.

问题是 - 是否有一些其他更短的优化方法来重写此代码,可能使用itertools?

2 个答案:

答案 0 :(得分:3)

您可以itertools.combinations使用itertools.izip

>>> from itertools import izip, combinations
>>> for a, b in combinations(izip(a, b), 2):
        print a, b
...     
(1, 2) (3, 4)
(1, 2) (5, 6)
(1, 2) (7, 10)
(3, 4) (5, 6)
(3, 4) (7, 10)
(5, 6) (7, 10)

答案 1 :(得分:1)

是:itertools.combinations

print list(itertools.combinations(w, 2))

你在问题​​中提到这一点 - 我不确定为什么在问StackOverflow之前你不会查看文档。