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

Обновить

December 2018

Просмотры

16k раз

18

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

13

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

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

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

8

Вы можете использовать множество разностного оператора , как это

test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
0
>>> 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'])
1

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

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

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

Выход:

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