创建列表副本并删除元素
我想写一些像这样的代码
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 个回答
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]]
6
Python 提供了一个叫做 itertools.combinations
的工具,它正好可以满足你的需求:
>>> import itertools
>>> s = [0,1,2]
>>> list(itertools.combinations(s, len(s) - 1))
[(0, 1), (0, 2), (1, 2)]
更棒的是,它返回的是一个生成器,这样你就可以轻松地遍历所有组合,而不会占用太多内存。
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]]
>>>
>>> S = set(range(3))
>>> F = [S - set((i,)) for i in S]
>>> F
[set([1, 2]), set([0, 2]), set([0, 1])]
如果你不需要这些元素按照特定的顺序排列,也就是说你可以使用集合(sets),并且你想通过值来删除项目,而不是通过索引来删除,那么这个方法会更简洁优雅: