Ответ 1
Вы можете использовать оператор разностных разностей, например
test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
Я думаю, что это может быть связано, чтобы установить время 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'])]
Вы можете использовать оператор разностных разностей, например
test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
Всякий раз, когда вы чувствуете себя ограниченным методом, который работает только на месте, вы можете использовать поведение or
/and
для достижения семантики, которую вы хотите.
[x.discard('') or x for x in test]
Этот метод иногда полезен для достижения вещей в lambda
(или в других ситуациях, когда вы ограничены одним выражением), которые в противном случае невозможны. Является ли это наиболее "читаемым" или "питоновым" спорным :-)
Это? (Дубликат @thefourtheye ответ)
set
вычитания возвращает set
данные.
test = [{'', 'a'}, {'b', ''}]
print [x - {''} for x in test]
print test
Вывод:
[set(['a']), set(['b'])]
[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'])