Ich beziehe mich auf diese Frage, und vor allem die Kommentare zu der ersten Antwort von @ David Robinson und @mgilson: Sum the second value of each tuple in a listWarum ist das Entpacken schneller als der Zugriff per Index?
Die ursprüngliche Frage der zweite Wert jedes tuble zusammenzufassen war:
structure = [('a', 1), ('b', 3), ('c', 2)]
Erste Antwort:
sum(n for _, n in structure)
Zweite Antwort:
sum(x[1] for x in structure)
Laut Diskussion ist die erste Antwort 50% schneller.
Sobald ich herausgefunden habe, was die erste Antwort (von Perl kommt, googelte ich für die spezielle _ Variable in Python), habe ich mich gefragt, was kommt als eine reine Teilmenge Aufgabe (nur das zweite Element von jedem bekommen Tupel vs. Getting und Bindung an Variablen beider Elemente) ist eigentlich langsamer? Ist es eine fehlende Möglichkeit, den Indexzugriff in Python zu optimieren? Fehle ich etwas, was die zweite Antwort braucht, was Zeit braucht?
Nichtsdestotrotz würde ich erwarten, dass 'BINARY_SUBSCRIPT' eine recht effiziente Operation (nach dem Nachschlagen) ist, während 'UNPACK_SEQUENCE' nicht gleich (O (1) vs. O (n) ist) und die tiefgestellte Operation eine weniger benötigt Speichervorgang. Tatsächlich ist Ihre Formatierung des Codes irreführend - beide Operationen nehmen die gleiche Anzahl von Op-Codes an und Sie haben nicht wirklich erklärt, warum das Entpacken schneller ist als das Subskribieren: insbesondere warum benötigt das Entpacken nicht auch eine Methodensuche über ' PyObject_GetItem'? –
@KonradRudolph: Erweitert. Interessanterweise, wenn Sie das Tupel durch eine Liste ersetzen, können die Tabellen gut umgesetzt werden. –