Heim >Backend-Entwicklung >Python-Tutorial >PYTHON reduziert verschachtelte Listen

PYTHON reduziert verschachtelte Listen

高洛峰
高洛峰Original
2017-03-03 14:05:201659Durchsuche

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 res

Eine 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn