Ich erhalte eine verschachtelte Liste als Eingabe.
Vereinfachte Version ist wie unter.

myList=[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]

Ich möchte es in eine einfache Liste von Listen auspacken.
Ich kann so machen ...

    simpleList=[]
    for i in myList:
        for j in i:
            simpleList.append(j)

Wie gewünscht ist die simpleList

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]

Meine Frage: -
Was ich getan habe, war vielleicht ein Codierungsansatz für Anfänger.
Gibt es einen professionelleren, effizienteren (und pythonischer ) Ansatz zum Entpacken dieser verschachtelten Liste?
Vielen Dank.

BEARBEITEN : -
Meine Methode funktioniert nicht für tief verschachtelte Listen.
z.B. [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]],[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9],[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]]
pl. Antworten finden Sie in den Kommentaren.

-1
Vineet 18 Apr. 2018 im 16:29

3 Antworten

Beste Antwort

Sie können dies mit einer recursive -Funktion tun, um verschachtelte Listen mit beliebiger Tiefe zu lösen.

def unwrap_list(mylist, result):
   if any(isinstance(i, list) for i in mylist):
      for value in mylist:
         unwrap_list(value, result)
   else:
      result.append(mylist)

mylist = [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]
result = []
unwrap_list(mylist, result)
print(result)

Ein anderer Ansatz ist die Verwendung eines Generators .

def flatten(L):
    for item in L:
        if any(isinstance(i, list) for i in item):
          yield from flatten(item)
        else:
          yield item
-1
Mihai Alexandru-Ionut 19 Apr. 2018 im 07:35

Verwenden Sie chain aus itertools

from itertools import chain
myList=[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]
print(list(chain.from_iterable(myList)))   #print(list(chain(*myList)))

Ausgabe:

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]
2
Rakesh 18 Apr. 2018 im 13:36
myList=[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]
reduce(lambda x, y: x+y, myList)

Ausgabe:

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]
-1
Nishant Nawarkhede 18 Apr. 2018 im 13:31