209 votes

Comment joindre deux ensembles sur une ligne sans utiliser "|" ?

Supposons que S y T sont des ensembles assignés. Sans utiliser l'opérateur de jointure | Comment puis-je trouver l'union de ces 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 en une ligne sans utiliser | ?

356voto

0vid Points 412

Vous pouvez utiliser la méthode d'union pour les ensembles : set.union(other_set)

Notez qu'elle renvoie un nouvel ensemble, c'est-à-dire qu'elle ne se modifie pas elle-même.

58voto

Vous pourriez 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])

51voto

user1362215 Points 636

Si vous êtes d'accord pour modifier l'ensemble original (ce que vous pouvez vouloir 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 y T .

29voto

arshajii Points 65653

En supposant que vous ne pouvez pas non plus utiliser s.union(t) ce qui est équivalent à 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])

18voto

BenjaminCohen Points 278

Si par "joindre" vous voulez dire "union", essayez ceci :

set(list(s) + list(t))

C'est un peu une pirouette, mais je ne peux pas penser à une meilleure façon de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X