创建列表副本并删除元素

时间:2011-06-01 01:38:54

标签: python list

我想写这样的东西

S = [ 0, 1, 2 ]
F = [ S.without(i) for i in range(0,len(S)) ]
print F

和Python推出

[[0,1],[0,2],[1,2]]

并且在在线参考中没有找到类似的东西。你能救我吗?

3 个答案:

答案 0 :(得分:6)

Python提供itertools.combinations,它完全符合您的要求:

>>> import itertools
>>> s = [0,1,2]
>>> list(itertools.combinations(s, len(s) - 1))
[(0, 1), (0, 2), (1, 2)]

更好的是,它会返回一个生成器,因此您可以轻松地迭代所有组合而无需占用太多​​内存。

答案 1 :(得分:2)

>>> S = [0, 1, 2]
>>> F = [S[0:i] + S[i+1:] for i in range(len(S))]
>>> print F
[[1, 2], [0, 2], [0, 1]]
>>> 

如果您不需要任何顺序的元素 - 也就是说,如果您可以使用集合 - 并且如果您想通过而不是删除项目index ,那么这是一个更优雅的解决方案:

>>> S = set(range(3))
>>> F = [S - set((i,)) for i in S]
>>> F
[set([1, 2]), set([0, 2]), set([0, 1])]

答案 2 :(得分:1)

嵌套列表理解可以完成这项工作:

>>> S = [ 0, 1, 2 ]
>>> F = [[x for x in S if x != s] for s in S]
>>> print F
[[1, 2], [0, 2], [0, 1]]