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)

War es hilfreich?

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]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top