Aggiungi valori a un set in Python


Risposte:


405
keep.update(yoursequenceofvalues)

ad esempio, keep.update(xrange(11))per il tuo esempio specifico. Oppure, se si dispone per produrre i valori in un ciclo per qualche altro motivo,

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

Ma, naturalmente, farlo alla rinfusa con una sola .updatechiamata è più veloce e più maneggevole, quando altrimenti fattibile.


78
.addaggiunge un singolo elemento, .updateaggiunge diversi elementi. È corretto?
ThorSummoner,

16
@ThorSummoner Sì, si .addaspetta un solo tipo hash, mentre si .updateaspetta un oggetto iterabile
Bonnie,

4
Se aggiungi una stringa con aggiornamento, verrà aggiunto un elemento per carattere nella stringa perché è iterabile!
hgolov,

2
È davvero importante notare che le stringhe, in quanto oggetti "interi", dovrebbero essere aggiunte .add, non .update, di recente ho dovuto affrontare un bug piuttosto subdolo a causa di questo piccolo dettaglio.
lalilulelost,

278

Definisci set

a = set()

Usa aggiungi per aggiungere singoli valori

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

Usa aggiornamento per aggiungere elementi da tuple, set, elenchi o set congelati

a.update([3,4])

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

Se si desidera aggiungere una tupla o un set congelato, utilizzare Aggiungi

a.add((5, 6))

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

Nota: poiché gli elementi del set devono essere hash e gli elenchi sono considerati mutabili, non è possibile aggiungere un elenco a un set. Inoltre, non è possibile aggiungere altri set a un set. Tuttavia, è possibile aggiungere elementi dagli elenchi e dai set come dimostrato con il metodo ".update".


105

Puoi anche usare l' |operatore per concatenare due insiemi ( unione nella teoria degli insiemi):

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

O una forma più breve usando |=:

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

Nota: nelle versioni precedenti a Python 2.7, utilizzare set([...])invece di {...}.


1
Se hai un elenco di set my_sets, allora puoi fare big_set = my_sets[0].union(*my_sets[1:])per combinarli tutti
zelusp


10

Questa è la prima domanda che compare su Google quando si cerca "Python come aggiungere elementi al set", quindi vale la pena notare esplicitamente che, se si desidera aggiungere un'intera stringa a un set, è necessario aggiungerlo con .add(), no .update().

Supponi di avere una stringa il foo_strcui contenuto è 'this is a sentence'e ne hai un set bar_setuguale a set().

Se lo fai bar_set.update(foo_str), i contenuti del tuo set saranno {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Se lo fai bar_set.add(foo_str), i contenuti del tuo set saranno {'this is a sentence'}.


3

Il modo in cui mi piace fare questo è convertire sia il set originale che i valori che vorrei aggiungere in elenchi, aggiungerli e quindi riconvertirli in un set, in questo modo:

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'}

In questo modo posso anche aggiungere facilmente più set usando la stessa logica, il che mi TypeError: unhashable type: 'set'dà un se provo a farlo con il .update()metodo.


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

O

keep.update(np.arange(11))

0

Per me, in Python 3, funziona semplicemente in questo modo:

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

Non so se potrebbe essere corretto ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.