Eu tenho um conjunto como este:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
Como adiciono valores [0,1,2,3,4,5,6,7,8,9,10]
a este conjunto?
Eu tenho um conjunto como este:
keep = set(generic_drugs_mapping[drug] for drug in drug_input)
Como adiciono valores [0,1,2,3,4,5,6,7,8,9,10]
a este conjunto?
Respostas:
keep.update(yoursequenceofvalues)
por exemplo, keep.update(xrange(11))
para o seu exemplo específico. Ou, se você precisar produzir os valores em um loop por algum outro motivo,
for ...whatever...:
onemorevalue = ...whatever...
keep.add(onemorevalue)
Mas, é claro, fazer isso em massa com uma única .update
chamada é mais rápido e prático, quando possível.
.add
espera que um único tipo Hashable, enquanto .update
espera um objeto iterável
.add
, e não .update
recentemente, eu enfrentei um bug bastante sorrateiro por causa desses pequenos detalhes.
Definir conjunto
a = set()
Use add para acrescentar valores únicos
a.add(1)
a.add(2)
Use update para adicionar elementos de tuplas, conjuntos, listas ou conjuntos congelados
a.update([3,4])
>> print(a)
{1, 2, 3, 4}
Se você deseja adicionar uma tupla ou um conjunto congelado, use add
a.add((5, 6))
>> print(a)
{1, 2, 3, 4, (5, 6)}
Nota: Como os elementos do conjunto devem ser laváveis e as listas são consideradas mutáveis, você não pode adicionar uma lista a um conjunto. Você também não pode adicionar outros conjuntos a um conjunto. No entanto, você pode adicionar os elementos de listas e conjuntos, conforme demonstrado com o método ".update".
Você também pode usar o |
operador para concatenar dois conjuntos ( união na teoria dos conjuntos):
>>> my_set = {1}
>>> my_set = my_set | {2}
>>> my_set
{1, 2}
Ou um formulário mais curto usando |=
:
>>> my_set = {1}
>>> my_set |= {2}
>>> my_set
{1, 2}
Nota: Nas versões anteriores ao Python 2.7, use em set([...])
vez de {...}
.
my_sets
, então você pode fazer big_set = my_sets[0].union(*my_sets[1:])
para combiná-los todos
Esta pergunta é a primeira que aparece no Google quando se consulta "Python como adicionar elementos ao conjunto". Portanto, vale a pena observar explicitamente que, se você deseja adicionar uma string inteira a um conjunto, ela deve ser adicionada com .add()
, não .update()
.
Digamos que você tenha uma string foo_str
cujo conteúdo seja 'this is a sentence'
e tenha algum conjunto bar_set
igual a set()
.
Se o fizer
bar_set.update(foo_str)
, o conteúdo do seu conjunto será {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}
.
Se o fizer bar_set.add(foo_str)
, o conteúdo do seu conjunto será {'this is a sentence'}
.
A maneira que eu gosto de fazer isso é converter o conjunto original e os valores que gostaria de adicionar em listas, adicioná-los e depois convertê-los novamente em um conjunto, como este:
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'}
Dessa forma, também posso adicionar facilmente vários conjuntos usando a mesma lógica, o que me leva a um erro TypeError: unhashable type: 'set'
se tentar fazê-lo com o .update()
método
keep.update((0,1,2,3,4,5,6,7,8,9,10))
Ou
keep.update(np.arange(11))
.add
adiciona um único item,.update
adiciona vários itens. Isso está correto?