Python: for-Schleife in der index-Zuordnung

Während der Arbeit durch das Super Buch "Programming Collective Intelligence" von Toby Segaran, ich habe festgestellt, einige Techniken in der index-Zuordnungen, ich bin nicht ganz vertraut mit.

Nehmen Sie dies zum Beispiel:

createkey='_'.join(sorted([str(wi) for wi in wordids]))

oder:

normalizedscores = dict([(u,float(l)/maxscore) for (u,l) in linkscores.items()])

Alle geschachtelten Tupel von Indizes, die mich ein bisschen verwirrt haben. Was ist eigentlich zugewiesen wird, werden diese Variablen? Ich nahm natürlich die .join kommt man sich wie ein string, aber was ist mit letzterem? Wenn jemand könnte erklären, die mechanik der Schlaufen würde ich es wirklich schätzen. Ich nehme an, das sind ziemlich Allgemeine Techniken, aber wird neu in Python, ich nehme an, zu Fragen, ist ein moment der Scham. Danke!

  • float(l) Nehme ich an...
  • rechts mein schlecht - bearbeitet
  • Jeder ist zu erwähnen, dass diese Liste Verstehens. Was die Leute nicht zu erwähnen, ist, dass diese Beispiele falsch sind und dass diejenigen, die eckigen Klammern sollten weggelassen werden-Sie werden sollte, generator-Ausdrücke statt, das sind die selben, außer Sie liefert nur Werte wie nötig, anstatt speichert Sie alle in einer Liste. Da bist du nur mit den Listen sofort, dann werfen Sie Sie Weg, Sie wären besser dran, nur mit generator-Ausdrücke.
  • könnten Sie ein Beispiel geben? Ich bin neu in diesem Ansatz. Danke!
  • Ersetzen Sie einfach die eckigen Klammern mit den Klammern, und die sorted und dict - Funktionen fragt nach einem Wert in einer Zeit, die der generator-Ausdruck geben, statt speichern Sie Sie alle in eine temporäre Liste.
  • Nicht sorted() erstellen Sie eine Liste überhaupt?
  • Ich habe gerade timed, und sorted() dauert ungefähr 10 % länger auf einen generator-Ausdruck als eine Liste.
  • Aber mit einer list comprehension die Liste hat zu existieren zweimal, statt einmal. Welche version ist das auf? Liste Verstehens sind im Grunde list() um einen generator-Ausdruck auf Python 3.2+ (?) aber ich wäre nicht überrascht, ein Unterschied von 10% in früheren Versionen.
  • Nein, es muss nicht doppelt vorhanden. Es ist gebaut, während die Liste Verständnis und als parameter übergeben zu sorted() (was dann wieder eine neue Liste). Mit genex, sorted() zunächst erstellen Sie eine Liste aus dem genex' Ergebnisse, und dann eine Liste erstellen, die es gibt. Ich hatte zeitlich das auf Python-3.2.2 wo der Effekt stärker ausgeprägt ist als an Python 2.7.2 (ich habe die timings meiner neu bearbeitete Antwort.

Schreibe einen Kommentar