Nehmen Sie an, dass S
und T
Sätze zugewiesen sind. |
Wie kann ich ohne Verwendung des Join-Operators die Vereinigung der beiden Mengen finden? Dies findet zum Beispiel den Schnittpunkt:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Wie kann ich also die Vereinigung zweier Sätze in einer Zeile finden, ohne sie zu verwenden |
?
|
?|
?def apply_set_operation(a, b, set_operation)
. Beim Aufruf dieser Funktion, würde ich es vorziehen ,apply_set_operation(a, b, set.union)
zuapply_set_operation(a, b, set.__or__)
Antworten:
Sie können die Vereinigungsmethode für Mengen verwenden:
set.union(other_set)
Beachten Sie, dass ein neuer Satz zurückgegeben wird, dh er ändert sich nicht selbst.
quelle
|
kann ändern die Variable inline:set_a |= set_b
set_a = set_a.union(set_b)
. Wenn Sie "an Ort und Stelle" meinen, wird keiner das tun, beide erstellen einen neuenset
a = set((1, 2, 3,)); b = set((1, 3, 4,)); id_a = id(a); a |= b; assert id_a == id(a)
, @jorgenkg ist richtig - Variablea
wird inline geändert. Vermisse ich etwasa = set((1, 2, 3,)); b = set((1, 3, 4,)); c = a; a |= b; assert id(c) == id(a)
. Selbst wenna
es zerstört wordenc
wäre , wäre es nicht gewesen. Auchc
ist jetztset([1, 2, 3, 4])
, also ist @ jorgenkgs Kommentar korrekt.Sie könnten einen
or_
Alias verwenden:quelle
Wenn Sie mit dem Ändern des Originalsatzes zufrieden sind (was Sie in einigen Fällen möglicherweise tun möchten), können Sie Folgendes verwenden
set.update()
:Der Rückgabewert ist
None
,S
wird aber aktualisiert, um die Vereinigung des OriginalsS
und zu seinT
.quelle
Angenommen, Sie können auch nicht verwenden
s.union(t)
, was gleichbedeutend ists | t
, könnten Sie es versuchenOder wenn Sie ein Verständnis wollen,
quelle
Wenn Sie mit Beitritt Gewerkschaft meinen, versuchen Sie Folgendes:
Es ist ein bisschen wie ein Hack, aber ich kann mir keinen besseren Einzeiler dafür vorstellen.
quelle
list
undset
sind in Python-Funktionen gebautAngenommen, Sie haben 2 Listen
So finden Sie
A
UnionB
wie folgtAuch wenn Sie Schnittpunkte und Nichtkreuzungen suchen möchten, gehen Sie wie folgt vor
quelle
Sie können einfach beide Sets wie folgt in eines auspacken:
Das
*
packt das Set aus. Beim Auspacken wird ein iterierbares Element (z. B. ein Satz oder eine Liste) als jedes Element dargestellt, das es ergibt. Dies bedeutet, dass das obige Beispiel vereinfacht und{1, 2, 3, 4, 3, 4, 5, 6}
dann vereinfacht wird,{1, 2, 3, 4, 5, 6}
da das Set nur eindeutige Elemente enthalten kann.quelle
*
in Zeile 3?Sie können tun
union
oder einfach ListenverständnisA hätte alle Elemente von B.
quelle