Een geneste lijst verwijderen

Mogelijk duplicaat:
Een platte lijst maken van een lijst met lijsten in Python

Ik probeer een gemakkelijke manier te vinden om een multidimensionale (geneste) pythonlijst om te zetten in een enkele lijst, die alle elementen van sublijsten bevat.

Bijvoorbeeld:

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

gaat over naar

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

of

A = [[1,2], [3,4]]

gaat over naar

A = [1,2,3,4]

Antwoord 1, autoriteit 100%

Gebruik itertools.chain:

itertools.chain(*iterables):

Maak een iterator die elementen uit de eerste iterable retourneert totdat deze is uitgeput, en vervolgens doorgaat naar de volgende iterable, totdat alle iterables zijn uitgeput. Gebruikt om opeenvolgende reeksen als een enkele reeks te behandelen.

Voorbeeld:

from itertools import chain
A = [[1,2], [3,4]]
print list(chain(*A))
# or better: (available since Python 2.6)
print list(chain.from_iterable(A))

De uitvoer is:

[1, 2, 3, 4]
[1, 2, 3, 4]

Antwoord 2, autoriteit 48%

Gebruik reducefunctie

reduce(lambda x, y: x + y, A, [])

Of sum

sum(A, [])

Antwoord 3, autoriteit 10%

het eerste geval kan ook gemakkelijk worden gedaan als:

A=A[0]

Antwoord 4, autoriteit 6%

itertoolsbiedt de ketenfunctie daarvoor:

Van http://docs.python.org/library/itertools.html#recipes :

def flatten(listOfLists):
    "Flatten one level of nesting"
    return chain.from_iterable(listOfLists)

Houd er rekening mee dat het resultaat een herhaling is, dus u hebt mogelijk list(flatten(...))nodig.

Other episodes