122 votes

Méthode pythonique pour créer l'union de toutes les valeurs contenues dans plusieurs listes

J'ai une liste de listes :

lists = [[1,4,3,2,4], [4,5]]

Je souhaite aplatir cette liste et supprimer tous les doublons ou, en d'autres termes, appliquer une opération d'union d'ensembles :

desired_result = [1, 2, 3, 4, 5]

Quelle est la manière la plus simple de procéder ?

209voto

sth Points 91594

set.union fait ce que vous voulez :

>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])

Vous pouvez également le faire avec plus de deux listes.

18voto

Alex Martelli Points 330805

Puisque vous semblez utiliser Python 2.5 (il serait Il serait bon de mentionner dans votre Q si vous avez besoin d'un A pour les versions != 2.6, la version de production actuelle, soit dit en passant;-) et que vous voulez une liste plutôt qu'un ensemble comme résultat, je vous le recommande :

import itertools

...

return list(set(itertools.chain(*result_list)))

itertools est généralement un excellent moyen de travailler avec des itérateurs (et donc avec de nombreux types de séquences ou de collections) et je vous recommande vivement de vous familiariser avec lui. itertools.chain en particulier, est documentée h .

3voto

GrvTyagi Points 21

Vous pouvez également suivre ce style

In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']

In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']

3voto

Randy Points 21

De manière compréhensive :

[*{ j for i in lists for j in i }]

ou

[*functools.reduce(lambda x,y: {*x, *y}, lists)]

2voto

Justin R. Points 10122

Les unions ne sont pas prises en charge par les listes, qui sont ordonnées, mais sont prises en charge par les ensembles. Consultez set.union .

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