Ich möchte einige Daten klassifizieren, die ich habe und für die ich arbeiten möchte Ich möchte die Indexierung von Python-Listen verketten. Vereinfachte Ich habe eine verschachtelte Liste:Schnellste Möglichkeit, mehrere Indexierungsoperationen für Python-Listen zu verketten
lst = [[[1], [2]], [[3, 3], [4]], [[5], [6,6,6]]]
und ich möchte über das Produkt der ersten beiden Indizes wiederholen, aber der dritte die gleiche halten:
from itertools import product
for index1, index2 in product(range(3), range(2)):
print(lst[index1][index2][0])
Allerdings möchte ich diese allgemeinere machen ohne vorher zu wissen, wie viele Substrukturen tief gehen muss (ich möchte die Zahl range
an itertools.product
Variable übergeben).
Ich kämpfe ein bisschen wie ich die [index1][index2][0]
verallgemeinern kann eine willkürliche Anzahl von indices
zu akzeptieren, das Beste, was ich functools.reduce
mit war einfiel:
from functools import reduce
for indices in product(range(3), range(2)):
print(reduce(list.__getitem__, indices, lst)[0])
Das furchtbar kompliziert erscheint (und deutlich langsamer ist als die manuelle Indizierung), also habe ich mich gefragt, ob es einen besseren und schnelleren Weg gibt, das zu tun. Ich benutze sowohl Python 2.x und 3.x und externe Bibliotheken sind in Ordnung (aber es sollte nicht NumPy
oder Pakete basierend auf NumPy
erfordern). Verwenden Sie einfach die Python-builtin reduce
für diese
Durch Ihre Aussage * "Allerdings möchte ich diese allgemeinere machen, ohne im Voraus zu wissen, wie viele Substrukturen tief gehen müssen. "* Meinst du, die Tiefe der Liste ist unbekannt, dh sie könnte n Level tief/verschachtelt sein? –
Tut mir leid, wenn ich unklar war, der variable Teil ist die ** Nummer ** ('n') von' Bereichen', die für 'Produkt' (und somit die Länge von' Indizes') vergeben werden. Die Tiefe der Liste ist "unbekannt", aber mindestens "n + 1" Substrukturen tief. Ich werde die Frage aktualisieren. – MSeifert