web-dev-qa-db-fra.com

Comment joindre deux ensembles en une ligne sans utiliser "|"

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

133
fandyst

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.

249
ovrwngtvity

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])
124
r_2

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])
36
Alexander Klimenko

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])
19
arshajii

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.

17
Max Candocia

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.

13
BenjaminCohen

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
9
iyogeshjoshi

Vous pouvez faire union ou une simple compréhension de liste

[A.add(_) for _ in B]

A aurait tous les éléments de B

6
Vaibhav Mishra