Python: Indizierung Liste für element verschachtelte Liste
Weiß ich, was ich Suche. Ich möchte python, um mir zu sagen, in welcher Liste Sie sich befinden.
Hier einige pseudocode:
item = "a"
nested_list = [["a", "b"], ["c", "d"]]
list.index(item) #obviously this doesn't work
hier möchte ich python auf 0 zurück (weil "a" ist ein element in der ersten sub-Liste in den größeren Liste). Ich interessiere mich nicht, was sub-element es sich handelt. Ist mir egal, wenn es Duplikate sind, z.B., ["a", "b", "a"] zurückgeben sollte, das gleiche wie das obige Beispiel.
InformationsquelleAutor der Frage aquateenfan | 2010-03-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Python 2.6 oder besser,
vorausgesetzt, Sie wollen z.B. eine
-1
Ergebnis, wenn'a'
ist in keiner der Teillisten.Natürlich ist es getan werden kann, die in älteren Versionen von Python, auch, aber nicht ganz so handlich, und da Sie nicht angeben, welche Python-Versionen, die Sie interessiert, ich denke, es ist am besten, um die neueste Produktion-solide ein (ändern Sie einfach Ihre Antwort, wenn Sie brauchen, um anzugeben, andere, ältere Versionen von Python).
Bearbeiten: pro Anfrage, lassen Sie mich versuchen zu erklären, wie diese funktionieren. Ich bin mit dem (neu in 2.6) built-in-Funktion nächstespeziell ich rufe
next(iterator, default)
: gibt das nächste Element der iterator (und somit die erste, denn dies ist die erste Zeit, in der wir voran, iterator), oder der Standard-Wert, wenn der iterator ist fertig (das bedeutet "leer", wenn es fertig ist, bevor wir überhaupt erweitert;-). Der Standardwert ist klar, dass-1
und wird zurückgegeben, wenn "a
ist in keiner der unterlisten", was dasselbe bedeutet wie "der iterator ist leer" in diesem Fall.Schauen wir uns den iterator wieder:
die (Runde) Klammern gesetzt
for
undif
keywords meinst das ist ein generator-Ausdruck, auch bekannt für die Kürze als genexp.i
(der index) und diesublist
(das Element, index) Voraus, überenumerate(nested_list)
-- wenn wir nichtenumerate
hier, dann wären wir nicht verfolgen Sie den index, aber in diesem Fall machen wir es brauchen. Sie sind nur in Betracht, wenn dieif
- Klausel erfüllt ist, das heißt, wenn das element, das Sie suchen, ist in der aktuellen Teilliste.So, in diesem genexp produziert, ein zu einer Zeit, jeden Wert des index, so dass die Unterliste auf diesen index erfüllt die Bedingung
"a" in sublist
. Seit dem verwenden wir es innext
wir nehmen nur die ersten solcher index.Die OP gerechtfertigt sein könnte zu denken, dass eine Magische vordefiniert, dies alles in drei oder vier Zeichen wäre handlicher -- und so würde es für diese sehr spezielle Anforderung, die ich glaube, ich habe noch nie getroffen, bevor Sie in über zehn Jahren mit der Nutzung von Python; aber wenn jeder eine solche Besondere Anforderung hatte seine eigene ganz spezielle builtin-die Sprache und die gelieferten würde, gewachsen, größer zu sein, als die Steuer-code. Stattdessen Python bietet viele lower-level "lego-Steine" und ein paar praktische Weg zu schnappen Sie zusammen, um klar (und relativ kurz) express die Lösung für ein combinatorially-Vielzahl von speziellen Anforderungen, wie die OP ist.
InformationsquelleAutor der Antwort Alex Martelli
Benötigen Sie eine Schleife konstruieren, die auf irgendeine Art:
Geben Sie einen generator, der für alle Teillisten mit dem Artikel, den Sie möchten, und geben Sie die ersten.
InformationsquelleAutor der Antwort sykora
Durchlaufen Sie die Liste, um jede Teilliste. Dann, überprüfen Sie, ob das Element in der Unterliste:
InformationsquelleAutor der Antwort Mike Cialowicz
InformationsquelleAutor der Antwort ghostdog74