如何使用列表推导从列表中的集合中移除特定元素
我觉得这可能和集合是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
每当你觉得某个方法只能在原地操作而感到受限时,可以利用 or
和 and
的特性来实现你想要的效果。
[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'])]