Supposons que S
et T
sont assignés des ensembles. Sans utiliser l'opérateur de jointure |
, comment puis-je trouver l'union des deux ensembles? Ceci, par exemple, trouve l'intersection:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Alors, comment puis-je trouver l'union de deux ensembles sur une ligne sans utiliser |
?
|
?|
?def apply_set_operation(a, b, set_operation)
. Lorsque vous appelez cette fonction, je préfèreapply_set_operation(a, b, set.union)
àapply_set_operation(a, b, set.__or__)
Réponses:
Vous pouvez utiliser la méthode d'union pour les ensembles:
set.union(other_set)
Notez qu'il renvoie un nouvel ensemble c'est-à-dire qu'il ne se modifie pas.
la source
|
pouvez modifier la variable en ligne:set_a |= set_b
set_a = set_a.union(set_b)
. Si vous voulez dire "sur place", aucun des deux ne le fera, les deux créent un nouveauset
a = set((1, 2, 3,)); b = set((1, 3, 4,)); id_a = id(a); a |= b; assert id_a == id(a)
:, @jorgenkg a raison - la variablea
est modifiée en ligne. Est-ce que je manque quelque chose?a = set((1, 2, 3,)); b = set((1, 3, 4,)); c = a; a |= b; assert id(c) == id(a)
. Même si ellea
avait été détruite, ellec
n'aurait pas été. Aussi,c
c'est maintenantset([1, 2, 3, 4])
, donc le commentaire de @ jorgenkg est correct.Vous pouvez utiliser un
or_
alias:la source
Si vous acceptez de modifier l'ensemble d'origine (ce que vous voudrez peut-être faire dans certains cas), vous pouvez utiliser
set.update()
:La valeur de retour est
None
, maisS
sera mise à jour pour être l'union de l'originalS
etT
.la source
En supposant que vous ne pouvez pas non plus utiliser
s.union(t)
, ce qui équivaut às | t
, vous pouvez essayerOu, si vous voulez une compréhension,
la source
Si par adhésion vous entendez union, essayez ceci:
C'est un peu un hack, mais je ne peux pas penser à une meilleure doublure pour le faire.
la source
list
etset
sont construits dans des fonctions pythonSupposons que vous ayez 2 listes
afin que vous puissiez trouver
A
UnionB
comme suitaussi si vous voulez trouver une intersection et une non-intersection, procédez comme suit
la source
Vous pouvez simplement décompresser les deux ensembles en un seul comme ceci:
Le
*
déballe l'ensemble. Le déballage est l'endroit où un itérable (par exemple un ensemble ou une liste) est représenté comme chaque élément qu'il produit. Cela signifie que l'exemple ci-dessus simplifie{1, 2, 3, 4, 3, 4, 5, 6}
ce qui se simplifie ensuite{1, 2, 3, 4, 5, 6}
car l'ensemble ne peut contenir que des éléments uniques.la source
*
ligne 3?Vous pouvez faire
union
ou simple compréhension de listeA aurait tous les éléments de B
la source