2017-02-05 5 views

Antwort

3

können Sie verwenden set mit Liste Verständnis:

lst = [(1,2),(1,3),(1,4),(1,5)] 

set(j for i in lst for j in i) 
# {1, 2, 3, 4, 5} 
+0

Dies ist der erste und einfachste/pythonischste Weg, die Frage zu lösen. Gute Antwort. –

+2

Sie könnten auch ein Set-Verständnis verwenden: '{j für i in lst für j in i}'. :) – MSeifert

1

Verwenden Sie chain.from_iterable aus dem itertools Modul. Es wird allgemein als der idiomatische Weg angesehen, ein 2D-iterables im Gegensatz zu einem geschachtelten Listenverständnis zu reduzieren. Siehe this Frage.

>>> from itertools import chain 
>>> set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)])) 
{1, 2, 3, 4, 5} 

chain.from_iterable flacht die Liste und set hält nur eindeutige Werte.

Um zurück in eine Liste zu konvertieren, übergeben Sie einfach den list Konstruktor.

>>>list(set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)]))) 
[1, 2, 3, 4, 5] 
0

In Ihrem erwartete Ausgabe der Reihenfolge der einzigartigen Elemente folgt der Reihenfolge des Erscheinens. Eine Möglichkeit, zu tun, wäre es (unter Verwendung einer externen Bibliothek, aber die Rezepte sind verfügbar in der itertools-recipes section):

>>> from iteration_utilities import flatten, unique_everseen 

>>> x = [(1,2),(1,3),(1,4),(1,5)] 

>>> list(unique_everseen(flatten(x))) 
[1, 2, 3, 4, 5] 
Verwandte Themen