我有一个这样的清单:
list=[0.2, 0.3, 0.5, 0.1, 0.7, 0.9]
我希望合并为下一个:
[[0.2,0.3][0.2,0.5][0.2,0.1][0.2,0.7]
[0.2,0.9][0.3,0.5][0.3,0.1][0.3,0.7]
[0.3,0.9][0.5,0.1][0.5,0.7][0.5,0.9]
[0.1,0.7][0.1,0.9][0.7][0.9]]
但我希望到达此列表:
[[0.2 0.3, 0.5 ][0.2 0.3 0.5, 0.1]...[0.2 0.3 0.5 0.1 0.7, 0.9]]
我的代码:
listOne=[0.2, 0.3, 0.5, 0.1, 0.7, 0.9]
listTwo=[]
i=0; j=0; aux=0;
while i<len(listOne):
while j<len(listOne):
print listOne[j]
listTwo.append(listOne[i])
listTwo.append(listOne[j])
j+=1
i+=1
print listTwo
这是我的输出列表
[0.2, 0.2, 0.2, 0.3, 0.2, 0.5, 0.2, 0.1 ]
答案 0 :(得分:1)
您可以在此处使用itertools.combinations
。我不明白你的期望。
from itertools import combinations
res = [i for i in combinations(list,2)] #please dont provide variable name as list
>>>res
[(0.2, 0.3),
(0.2, 0.5),
(0.2, 0.1),
... ]
答案 1 :(得分:0)
您可以使用列表推导来实现这一目标:
listOne = [0.2, 0.3, 0.5, 0.1, 0.7, 0.9]
listTwo = [listOne[:upto] for upto in range(3, len(listOne) + 1)]
print listTwo
输出:
[[0.2, 0.3, 0.5], [0.2, 0.3, 0.5, 0.1], [0.2, 0.3, 0.5, 0.1, 0.7], [0.2, 0.3, 0.5, 0.1, 0.7, 0.9]]
答案 2 :(得分:0)
我真的不明白你真正想做什么,但我想,你想找到列表的可能子集。
所以你可以使用itertools中的powerset: https://docs.python.org/2/library/itertools.html
def powerset(s):
'''powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3)(2,3) (1,2,3)'''
subset = itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s) + 1))
return [list(x) for x in subset]
myList = [0.2, 0.3, 0.5, 0.1, 0.7, 0.9]
subsets = powerset(myList)
如果您只想保留长度大于3的所有子集,可以使用subset.remove()
删除元素,或者使用filter()函数:
subsets = filter(lambda x: len(x)>=3, subsets)
所以你会得到你想要的结果。