Добавить значения к набору в Python


Ответы:


405
keep.update(yoursequenceofvalues)

Например, keep.update(xrange(11))для вашего конкретного примера. Или, если вам нужно произвести значения в цикле по какой-то другой причине,

for ...whatever...:
  onemorevalue = ...whatever...
  keep.add(onemorevalue)

Но, конечно, делать это массово с помощью одного .updateзвонка быстрее и удобнее, когда это возможно.


78
.addдобавляет один элемент, .updateдобавляет несколько элементов. Это верно?
ThorSummoner

16
@ThorSummoner Да, .addожидает один хешируемый тип, а .updateожидает итерируемый объект
Бонни

4
Если вы добавите строку с обновлением, она добавит один элемент на символ в вашей строке, потому что это итеративно!
hgolov

2
Действительно важно отметить, что строки, как «целые» объекты, должны быть добавлены .add, но .updateя недавно столкнулся с довольно хитрой ошибкой из-за этой маленькой детали.
lalilulelost

278

Определить набор

a = set()

Используйте add, чтобы добавить отдельные значения

a.add(1)
a.add(2)

Используйте обновление, чтобы добавить элементы из кортежей, наборов, списков или наборов функций

a.update([3,4])

>> print(a)
{1, 2, 3, 4}

Если вы хотите добавить кортеж или замороженный набор, используйте add

a.add((5, 6))

>> print(a)
{1, 2, 3, 4, (5, 6)}

Примечание. Поскольку элементы набора должны быть хешируемыми, а списки считаются изменяемыми, вы не можете добавить список в набор. Вы также не можете добавить другие наборы в набор. Однако вы можете добавить элементы из списков и наборов, как показано с помощью метода .update.


105

Вы также можете использовать |оператор для объединения двух множеств ( объединение в теории множеств):

>>> my_set = {1}
>>> my_set = my_set | {2}
>>> my_set
{1, 2}

Или более короткую форму, используя |=:

>>> my_set = {1}
>>> my_set |= {2}
>>> my_set
{1, 2}

Примечание. В версиях, предшествующих Python 2.7, используйте set([...])вместо {...}.


1
Если у вас есть список наборов my_sets, то вы можете big_set = my_sets[0].union(*my_sets[1:])объединить их все
zelusp


10

Этот вопрос является первым, который появляется в Google при поиске «Python, как добавлять элементы в набор», поэтому стоит отметить, что, если вы хотите добавить целую строку в набор, ее следует добавить с помощью .add(): не .update().

Скажем, у вас есть строка foo_strс содержимым 'this is a sentence', и у вас есть набор, bar_setравныйset() .

Если вы это сделаете bar_set.update(foo_str), содержимое вашего набора будет {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Если вы это сделаете bar_set.add(foo_str), содержимое вашего набора будет {'this is a sentence'}.


3

Мне нравится делать это, чтобы преобразовать исходный набор и значения, которые я хотел бы добавить, в списки, добавить их, а затем преобразовать обратно в набор, например, так:

setMenu = {"Eggs", "Bacon"}
print(setMenu)
> {'Bacon', 'Eggs'}
setMenu = set(list(setMenu) + list({"Spam"}))
print(setMenu)
> {'Bacon', 'Spam', 'Eggs'}
setAdditions = {"Lobster", "Sausage"}
setMenu = set(list(setMenu) + list(setAdditions))
print(setMenu)
> {'Lobster', 'Spam', 'Eggs', 'Sausage', 'Bacon'}

Таким образом, я также могу легко добавить несколько наборов, используя одну и ту же логику, что дает мне возможность, TypeError: unhashable type: 'set'если я попытаюсь сделать это с помощью .update()метода.



0

Для меня в Python 3 это работает просто так:

keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))

Я не знаю, может ли это быть правильным ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.