创建列表副本并删除元素

2 投票
3 回答
6065 浏览
提问于 2025-04-16 18:43

我想写一些像这样的代码

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),并且你想通过来删除项目,而不是通过索引来删除,那么这个方法会更简洁优雅:

撰写回答