如何使用列表推导从列表中的集合中移除特定元素

27 投票
3 回答
26800 浏览
提问于 2025-04-18 01:26

我觉得这可能和集合是mutable(可变的)有关。

简单来说,我可以用set.discard(element)从集合中移除一个元素。不过,set.discard(element)本身返回的是None。但是我想要得到一个更新后的集合的副本。例如,如果我有一个集合的列表,我该如何方便地使用列表推导式来获取一个更新后的副本呢?

示例代码:

test = [{'', 'a'}, {'b', ''}]
print [x.discard('') for x in test]
print test

将返回

[None, None]
[set(['a']), set(['b'])]

3 个回答

4
>>> s = set( ['a' , 'b', 'c' , 'd' ] )
>>> print(s)
set(['a', 'c', 'b', 'd'])
>>>
>>> s -= {'c'}
>>> print(s)
set(['a', 'b', 'd'])
>>>
>>> s -= {'a'}
>>> print(s)
set(['b', 'd'])

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

16

每当你觉得某个方法只能在原地操作而感到受限时,可以利用 orand 的特性来实现你想要的效果。

[x.discard('') or x for x in test]

这个技巧有时候在 lambda(或者其他只能用一个表达式的场合)中很有用,可以实现一些本来不可能做到的事情。至于这样做是否最“易读”或最“符合Python风格”,那就见仁见智了 :-)

14

你可以使用 集合差集运算符,像这样

test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]

撰写回答