的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?
答案 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)
print list(itertools.combinations(w, 2))
你在问题中提到这一点 - 我不确定为什么在问StackOverflow之前你不会查看文档。