Как удалить элемент из набора?

Я думаю, что это может быть связано, чтобы установить время 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'])]

Ответы

Ответ 2

Всякий раз, когда вы чувствуете себя ограниченным методом, который работает только на месте, вы можете использовать поведение or/and для достижения семантики, которую вы хотите.

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

Этот метод иногда полезен для достижения вещей в lambda (или в других ситуациях, когда вы ограничены одним выражением), которые в противном случае невозможны. Является ли это наиболее "читаемым" или "питоновым" спорным :-)

Ответ 3

Это? (Дубликат @thefourtheye ответ)

set вычитания возвращает set данные.

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

Вывод:

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

Ответ 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'])