Heim >Backend-Entwicklung >Python-Tutorial >PYTHON reduziert verschachtelte Listen
Liste ist der am häufigsten verwendete Datentyp in Python und in der Standardbibliothek stehen zahlreiche Funktionen zur Verfügung.
Wenn man jedoch eine mehrdimensionale Liste in eine eindimensionale Liste umwandelt (ich weiß nicht, ob dafür viele Anforderungen bestehen), ist es wirklich nicht einfach, eine nützliche Funktion zu finden .
Ich weiß, dass es Flatten zwischen Ruby, Mathematica und Groovy gibt.
Wenn die Liste wenige Dimensionen hat und regelmäßig ist, ist sie relativ einfach zu handhaben
Zum Beispiel:
li=[[1,2],[3,4],[5,6]] print [j for i in li for j in i] #or from itertools import chain print list(chain(*li)) #or a=[[1,2],[3,4],[5,6]] t=[] [t.extend(i) for i in a] print t #or print sum(li,[])
Für komplexere, wie zum Beispiel: li=[1,[2],[[3]],[[4,[5] ,6]] ], die obige Methode ist nicht einfach zu verwenden, daher müssen wir die Methode
ändern. Sie sieht aus wie ein Baum in der Struktur. Daher haben wir die folgende Methode 🎜>
def flat(tree): res = [] for i in tree: if isinstance(i, list): res.extend(flat(i)) else: res.append(i) return resEine andere Denkweise ist, dass verschachtelte Listen nichts anderes sind, als viele Paare eckiger Klammern zu haben Entfernen Sie die mittleren und konvertieren Sie es einfach als Zeichenfolge
def flatten(seq): s=str(seq).replace('[', '').replace(']', '') #当然也可以用正则 return [eval(x) for x in s.split(',') if x.strip()]Dieser Ansatz ist jedoch nicht für Zeichenfolgen geeignet, die „[“ oder „ enthalten. ]" in der Liste. Wir können nichts tun, wir müssen uns verbessern.Andere Methoden: Ich habe es in einem ausländischen Forum gesehen, es ist auch rekursiv und kann in durchgeführt werden eine Zeile
flat=lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]Die folgende Methode verwendet das Tkinter-Modul, eine Methode, die auf der Mailingliste zu finden ist. Ich vermute, dass viele Studenten nicht wissen, dass dies möglich ist, und man kann sagen, dass es mit Python geliefert wird. Beachten Sie, dass die Windows-Version von Python mit dem Tkinter-Modul geliefert wird, Linux jedoch nicht standardmäßig.
from Tkinter import _flatten li=reduce(lambda *x:list(x),range(2,6),[1]) print li print _flatten(li) #Out: #[[[[[1], 2], 3], 4], 5] #(1, 2, 3, 4, 5) #对元组同样适用Es gibt auch einige Module von Drittanbietern die solche Funktionen wie Sympy, Numpy, Pipe usw. bereitstellen. Für verschachtelte Tupel ist es nicht nötig, mehr zu sagen, nehmen Sie einfach ein paar Änderungen vor Der obige Artikel ist einfach Ich hoffe, dass es Ihnen eine Referenz geben kann und dass Sie die PHP-Chinese-Website unterstützen. Weitere Artikel zum Reduzieren verschachtelter Listen durch PYTHON finden Sie auf der chinesischen PHP-Website!