У меня есть такой набор:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
Как добавить значения [0,1,2,3,4,5,6,7,8,9,10]
в этот набор?
У меня есть такой набор:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
Как добавить значения [0,1,2,3,4,5,6,7,8,9,10]
в этот набор?
Ответы:
keep.update(yoursequenceofvalues)
Например, keep.update(xrange(11))
для вашего конкретного примера. Или, если вам нужно произвести значения в цикле по какой-то другой причине,
for ...whatever...:
onemorevalue = ...whatever...
keep.add(onemorevalue)
Но, конечно, делать это массово с помощью одного .update
звонка быстрее и удобнее, когда это возможно.
.add
ожидает один хешируемый тип, а .update
ожидает итерируемый объект
.add
, но .update
я недавно столкнулся с довольно хитрой ошибкой из-за этой маленькой детали.
Определить набор
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.
Вы также можете использовать |
оператор для объединения двух множеств ( объединение в теории множеств):
>>> 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([...])
вместо {...}
.
my_sets
, то вы можете big_set = my_sets[0].union(*my_sets[1:])
объединить их все
Этот вопрос является первым, который появляется в 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'}
.
Мне нравится делать это, чтобы преобразовать исходный набор и значения, которые я хотел бы добавить, в списки, добавить их, а затем преобразовать обратно в набор, например, так:
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()
метода.
keep.update((0,1,2,3,4,5,6,7,8,9,10))
Или
keep.update(np.arange(11))
.add
добавляет один элемент,.update
добавляет несколько элементов. Это верно?