如何从集合中删除元素?

Zhe*_*Sun 21 python set

我认为这可能与设定存在有关mutable.

基本上,我可以使用从集合中删除元素set.discard(element).然而,set.discard(element)它本身会回归None.但我想获得更新集的副本.例如,如果我有一个集合列表,如何使用列表推导操作方便地获取更新的副本?

示例代码:

test = [{'', 'a'}, {'b', ''}]
print [x.discard('') for x in test]
print test
Run Code Online (Sandbox Code Playgroud)

将返回

[None, None]
[set(['a']), set(['b'])]
Run Code Online (Sandbox Code Playgroud)

roi*_*ppi 14

只要您感觉受到仅适用于原位的方法的约束,您就可以使用or/ 的行为and来实现所需的语义.

[x.discard('') or x for x in test]
Run Code Online (Sandbox Code Playgroud)

这种技术偶尔可用于实现lambda(或限制为单个表达式的其他情况)中不可能实现的内容.无论是最"可读"还是"pythonic"都值得商榷:-)

  • 在这种情况下,请注意不要在左侧放置"x",否则"或"表达式将会短路并且永远不会发生突变.`[x或x.discard('')for x in test] == [{'','a'},{'','b'}]` (6认同)

the*_*eye 9

你可以使用set difference operator,就像这样

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

  • 这可能很好地解决了OP的实际问题,但是它在语义上与他在问题中所要求的有所不同,因为它不会修改原始集合。 (2认同)

jxr*_*mos 5

>>> 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'])
Run Code Online (Sandbox Code Playgroud)