Додайте значення до набору в 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очікує ітерабельний об’єкт
Bonnie

4
Якщо ви додасте рядок із оновленням, він додасть один елемент на символ у рядку, тому що це ітерабельний!
hgolov

2
Дійсно важливо зауважити, що рядки, як "цілі" об'єкти, слід додавати .add, ні .update, я нещодавно зіткнувся з досить підлим помилкою через цю маленьку деталь.
lalilulelost

277

Визначте набір

a = set()

Використовуйте Додати для додавання одиничних значень

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

Використовуйте оновлення, щоб додати елементи з кортежів, наборів, списків або заморожених наборів

a.update([3,4])

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

Якщо ви хочете додати кортеж чи заморожений набір, скористайтесь функцією "Додати"

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.