Pythonic Weg zum Erstellen Vereinigung aller in Mehrere Listen enthaltenen Werte
Frage
Ich habe eine Liste von Listen:
lists = [[1,4,3,2,4], [4,5]]
Ich möchte diese Liste glätten und alle Duplikate entfernen; oder, mit anderen Worten, gilt eine Reihe Vereinigungsoperation:
desired_result = [1, 2, 3, 4, 5]
Was ist der einfachste Weg, dies zu tun? (Ich bin gezwungen, Python zu verwenden 2.4 für dieses Projekt)
Lösung
set.union
tut, was Sie wollen:
>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])
Sie können dies auch mit mehr als zwei Listen.
Andere Tipps
Da Sie scheinen zu sein mit Python 2.5 (es würde nett zu erwähnen in Ihrem Q, wenn Sie ein A für die Versionen benötigen! = 2.6, die aktuelle Produktion ein, nebenbei bemerkt ;-) und möchte eine Liste, anstatt einen Satz als Ergebnis, empfehle ich:
import itertools
...
return list(set(itertools.chain(*result_list)))
itertools ist in der Regel eine gute Möglichkeit zur Arbeit mit Iteratoren (und so mit vielen Arten von Sequenzen oder Sammlungen) und ich Sie von ganzem Herzen werden mit ihm vertraut empfehlen. itertools.chain
, insbesondere, dokumentiert hier .
Die Gewerkschaften werden nicht durch Listen unterstützt, die bestellt werden, werden aber von Sätzen unterstützt. Schauen Sie sich set.union .
Ich habe die folgenden Kreuzungen zu tun, was die Notwendigkeit Sätze vermeidet.
a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)
oder
s = [ x for x in b if x in a ]
Sie können auch diese Art folgen
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']
desired_result = [x for y in lists for x in y]