Hängen Sie Werte an einen Satz in Python an

372

Ich habe ein Set wie dieses:

keep = set(generic_drugs_mapping[drug] for drug in drug_input)

Wie füge ich [0,1,2,3,4,5,6,7,8,9,10]diesem Satz Werte hinzu ?

l - '' '' '-' '' '' '' '' '' '' '
quelle

Antworten:

405
keep.update(yoursequenceofvalues)

zB keep.update(xrange(11))für Ihr spezifisches Beispiel. Oder, wenn Sie haben die Werte in einer Schleife aus einem anderen Grunde zu produzieren,

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

Aber natürlich .updateist es schneller und einfacher, es in großen Mengen mit einem einzigen Anruf zu erledigen, wenn dies sonst möglich ist.

Alex Martelli
quelle
78
.addfügt ein einzelnes Element .updatehinzu , fügt mehrere Elemente hinzu. Ist das korrekt?
ThorSummoner
16
@ThorSummoner Ja, .adderwartet einen einzelnen Hash-Typ, während .updateerwartet ein iterierbares Objekt
Bonnie
4
Wenn Sie eine Zeichenfolge mit Aktualisierung hinzufügen, wird ein Element pro Zeichen in Ihrer Zeichenfolge hinzugefügt, da es iterierbar ist!
Hgolov
2
Es ist in der Tat wichtig zu beachten, dass Zeichenfolgen als "ganze" Objekte hinzugefügt werden sollten .add, nicht .update, ich hatte kürzlich aufgrund dieses kleinen Details einen ziemlich hinterhältigen Fehler.
Lalilulelost
277

Set definieren

a = set()

Verwenden Sie add, um einzelne Werte anzuhängen

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

Verwenden Sie update, um Elemente aus Tupeln, Mengen, Listen oder eingefrorenen Mengen hinzuzufügen

a.update([3,4])

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

Wenn Sie ein Tupel oder ein Frozen-Set selbst hinzufügen möchten, verwenden Sie add

a.add((5, 6))

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

Hinweis: Da Mengenelemente hashbar sein müssen und Listen als veränderbar angesehen werden, können Sie einer Menge keine Liste hinzufügen. Sie können einem Satz auch keine anderen Sätze hinzufügen. Sie können jedoch die Elemente aus Listen und Sätzen hinzufügen, wie mit der Methode ".update" gezeigt.

RandallShanePhD
quelle
105

Sie können den |Operator auch verwenden , um zwei Mengen zu verketten ( Vereinigung in der Mengenlehre):

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

Oder eine kürzere Form mit |=:

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

Hinweis: Verwenden Sie in Versionen vor Python 2.7 set([...])anstelle von {...}.

nyuszika7h
quelle
1
Wenn Sie eine Liste von Sätzen haben my_sets, können Sie big_set = my_sets[0].union(*my_sets[1:])sie alle kombinieren
zelusp
45

Verwenden Sie updatewie folgt:

keep.update(newvalues)
sberry
quelle
10

Diese Frage ist die erste, die bei Google angezeigt wird, wenn "Python zum Hinzufügen von Elementen zum Set" nachgeschlagen wird. Wenn Sie also einem Set einen ganzen String hinzufügen möchten, sollten Sie Folgendes hinzufügen .add(): nicht .update().

Angenommen, Sie haben eine Zeichenfolge, foo_strderen Inhalt ist 'this is a sentence', und Sie haben eine Menge bar_setgleich set().

Wenn Sie dies tun bar_set.update(foo_str), wird der Inhalt Ihres Sets sein {'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}.

Wenn Sie dies tun bar_set.add(foo_str), wird der Inhalt Ihres Sets sein {'this is a sentence'}.

lalilulelost
quelle
3

Ich möchte dies tun, indem ich sowohl den ursprünglichen Satz als auch die Werte, die ich hinzufügen möchte, in Listen konvertiere, sie hinzufüge und sie dann wieder in einen Satz konvertiere, wie folgt:

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

Auf diese Weise kann ich auch problemlos mehrere Sätze mit derselben Logik hinzufügen. TypeError: unhashable type: 'set'Wenn ich es mit der .update()Methode versuche , bekomme ich eine .

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

Oder

keep.update(np.arange(11))
Rishi Jain
quelle
0

In Python 3 funktioniert das einfach so:

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

Ich weiß nicht, ob es richtig sein kann ...

Dekadenz
quelle