如何从集合中删除元素?

时间:2014-04-05 05:37:31

标签: python set

我认为这可能与设置为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'])]

4 个答案:

答案 0 :(得分:14)

每当您感觉受到仅适用于原位的方法的约束时,您可以使用or / and的行为来实现您想要的语义。

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

这个?(@thefourtheye回答的副本)

set减法运算返回set数据。

test = [{'', 'a'}, {'b', ''}]
print [x - {''} for x in test]
print test

输出:

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

答案 3 :(得分:1)

>>> 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'])