I think this may be related to set being mutable
.
Basically, I can remove an element from a set using set.discard(element)
. However, set.discard(element)
itself returns None
. But I'd like to get a copy of the updated set. For example, if I have a list of sets, how can I get an updated copy conveniently using list comprehension operations?
Sample code:
test = [{'', 'a'}, {'b', ''}]
print [x.discard('') for x in test]
print test
will return
[None, None]
[set(['a']), set(['b'])]
Whenever you feel constrained by a method that only works in-place, you can use the behavior of or
/ and
to achieve the semantics that you want.
[x.discard('') or x for x in test]
This technique is occasionally useful for achieving things in a lambda
(or other situations where you are restricted to a single expression) that are otherwise impossible. Whether it's the most "readable" or "pythonic" is debatable :-)
You can use set difference operator , like this
test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
>>> 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'])
This?(duplicate of @thefourtheye answer)
set
subtraction operation returns set
data.
test = [{'', 'a'}, {'b', ''}]
print [x - {''} for x in test]
print test
Output:
[set(['a']), set(['b'])]
[set(['a', '']), set(['', 'b'])]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.