Supposons que S
et T
soient affecté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 trouver l'union de deux ensembles sur une ligne sans utiliser |
?
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 lui-même.
Désolé, pourquoi ne pouvons-nous plus utiliser l'opérateur de jointure?
>>> set([1,2,3]) | set([4,5,6])
set([1, 2, 3, 4, 5, 6])
Vous pouvez utiliser or_
alias:
>>> from operator import or_
>>> from functools import reduce # python3 required
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])
En supposant que vous ne pouvez pas non plus utiliser s.union(t)
, ce qui équivaut à s | t
, vous pouvez essayer
>>> from itertools import chain
>>> set(chain(s,t))
set([1, 2, 3, 4, 5, 6])
Ou, si vous voulez une compréhension,
>>> {i for j in (s,t) for i in j}
set([1, 2, 3, 4, 5, 6])
Si vous voulez bien modifier le jeu d’origine (ce que vous voudrez peut-être faire dans certains cas), vous pouvez utiliser set.update()
:
S.update(T)
La valeur de retour est None
, mais S
sera mis à jour pour être l'union de l'original S
et T
.
Si par rejoindre vous entendez union, essayez ceci:
set(list(s) + list(t))
C'est un peu un bidouillage, mais je ne peux pas penser à un meilleur paquebot pour le faire.
Supposons que vous avez 2 listes
A = [1,2,3,4]
B = [3,4,5,6]
afin que vous puissiez trouver A
Union B
comme suit
union = set(A).union(set(B))
aussi si vous voulez trouver intersection et non-intersection, vous le faites comme suit
intersection = set(A).intersection(set(B))
non_intersection = union - intersection
Vous pouvez faire union
ou une simple compréhension de liste
[A.add(_) for _ in B]
A aurait tous les éléments de B