Załóżmy, że S
i T
są przypisane zestawy. |
Jak mogę znaleźć sumę dwóch zbiorów bez użycia operatora łączenia ? To na przykład znajduje przecięcie:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Jak więc mogę znaleźć sumę dwóch zestawów w jednej linii bez użycia |
?
|
?|
?def apply_set_operation(a, b, set_operation)
. Po wywołaniu tej funkcji, wolałbymapply_set_operation(a, b, set.union)
, abyapply_set_operation(a, b, set.__or__)
Odpowiedzi:
Możesz użyć metody sumowania dla zestawów:
set.union(other_set)
Zwróć uwagę, że zwraca nowy zestaw, tj. Nie modyfikuje się.
źródło
|
można zmodyfikować zmienną inline:set_a |= set_b
set_a = set_a.union(set_b)
. Jeśli masz na myśli „na miejscu”, żadne z nich nie zrobi tego, oba tworzą noweset
a = set((1, 2, 3,)); b = set((1, 3, 4,)); id_a = id(a); a |= b; assert id_a == id(a)
:, @jorgenkg ma rację - zmiennaa
jest modyfikowana w tekście . Czy coś mi brakuje?a = set((1, 2, 3,)); b = set((1, 3, 4,)); c = a; a |= b; assert id(c) == id(a)
. Nawet gdybya
został zniszczony,c
nie zostałby. Równieżc
teraz jestset([1, 2, 3, 4])
, więc komentarz @ jorgenkg jest poprawny.Możesz użyć
or_
aliasu:źródło
Jeśli możesz modyfikować oryginalny zestaw (co możesz zrobić w niektórych przypadkach), możesz użyć
set.update()
:Wartość zwracana to
None
, aleS
zostanie zaktualizowana, aby była sumą oryginałuS
iT
.źródło
Zakładając, że nie możesz również użyć
s.union(t)
, co jest równoważnes | t
, możesz spróbowaćLub, jeśli chcesz zrozumieć,
źródło
Jeśli przez dołączenie masz na myśli związek, spróbuj tego:
To trochę hack, ale nie mogę wymyślić lepszego jednego liniowca, aby to zrobić.
źródło
list
iset
są wbudowane w funkcje PythonaZałóżmy, że masz 2 listy
więc możesz znaleźć
A
UnionB
w następujący sposóbrównież jeśli chcesz znaleźć przecięcie i brak przecięcia, wykonaj to w następujący sposób
źródło
Możesz po prostu rozpakować oba zestawy do jednego w ten sposób:
*
Rozpakowuje zestawu. Rozpakowywanie polega na tym, że element iterowalny (np. Zestaw lub lista) jest reprezentowany jako każdy otrzymany element. Oznacza to, że powyższy przykład upraszcza się,{1, 2, 3, 4, 3, 4, 5, 6}
a następnie upraszcza,{1, 2, 3, 4, 5, 6}
ponieważ zestaw może zawierać tylko unikalne elementy.źródło
*
w linii 3?Możesz zrobić
union
lub po prostu zrozumieć listęA miałby wszystkie elementy B.
źródło