Hängen Sie Werte an einen Satz in Python an


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.


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.


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 {...}.


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)

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


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 .


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

Oder

keep.update(np.arange(11))

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 ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.