Die Iteration eines format-string eine Liste mit
In Lisp, Sie können so etwas wie dies:
(setf my-stuff '(1 2 "Foo" 34 42 "Ni" 12 14 "Blue"))
(format t "~{~d ~r ~s~%~}" my-stuff)
Was wäre die Pythonic Weg zu Durchlaufen, die gleiche Liste? Das erste, was mir einfällt, ist:
mystuff = [1, 2, "Foo", 34, 42, "Ni", 12, 14, "Blue"]
for x in xrange(0, len(mystuff)-1, 3):
print "%d %d %s" % tuple(mystuff[x:x+3])
Aber das fühlt sich einfach unangenehm zu mir. Ich bin mir sicher, dass es einen besseren Weg?
Gut, es sei denn, jemand höher bietet, ein besseres Beispiel, denke ich gnibbler die Lösung ist der schönste\am nächsten, auch wenn es vielleicht nicht ganz so offensichtlich auf den ersten, wie es tut, was es tut:
mystuff = [1, 2, "Foo", 34, 42, "Ni", 12, 14, "Blue"]
for x in zip(*[iter(mystuff)]*3):
print "{0} {1} {2}".format(*x)
Nebenbei, ist das nicht umständlich so ein schrecklich wunderbares Wort? Es ist nur aussieht umständlich!
Es sieht umständlich im Vergleich, aber es ist nicht wirklich schlecht.
+1 weil ich keine Ahnung habe, wenn du damit auf meinen Kommentar oder den code. Bitte nicht klären, die Mehrdeutigkeit ist viel mehr unterhaltsam/interessant!
Es sieht umständlich im Vergleich, aber es ist nicht wirklich schlecht.
+1 weil ich keine Ahnung habe, wenn du damit auf meinen Kommentar oder den code. Bitte nicht klären, die Mehrdeutigkeit ist viel mehr unterhaltsam/interessant!
InformationsquelleAutor Wayne Werner | 2010-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oder mit
.format
Wenn der format-string ist nicht hardcoded, Sie können analysieren it um herauszufinden, wie viele Begriffe pro Zeile
Alles zusammen gibt
Werner, gut auf Sie für Sie arbeiten heraus, warum es funktioniert
InformationsquelleAutor John La Rooy
Für den Anfang, würde ich die neuere Version verwenden string-Formatierung Methoden 2.6+
InformationsquelleAutor Josh Wright
Ich denke
join
ist die ähnliche Funktion in Python:Ist es ein wenig schlimmer, wenn Sie mehrere Elemente im inneren, wie Sie sehen, wenn Sie eine Gruppe-durch - Funktion (die ist wirklich nützlich, sowieso!), Ich denke, Sie können damit es funktioniert, ohne zu viel Mühe. So etwas wie:
Ja, ich denke, es hängt davon ab, wie viel Sie wollen, zu betrügen. Sie könnten port
FORMAT
zu Python und sagenFORMAT(True, "~{~d ~r ~s~%~}", my_stuff)
, wenn du wirklich gelangweilt ein Wochenende. 🙂Ich habe schon versucht! Natürlich möchte ich auch, dass die
~r
waren Teil der Python-libs, auch... Es gibt bereits ein Modul auf sourceforge: sourceforge.net/projects/pynum2wordInformationsquelleAutor Ken
Ich würde sagen, die meisten Pythonic sein würde, um die Liste tiefer:
[x for x in zip(*[iter(mystuff)]*3)]
=[(1, 2, 'foo'), (34, 42, 'ni'), (12, 14, 'blue')]
Ziemlich glatt, neh?Ich weiß, dass, aber ich denke, es ist mehr Pythonic zu haben, nur um die Liste in dieser form zu beginnen. Das war die ursprüngliche Frage, richtig?
Gut, ich war ein wenig zweideutig, so dass ich der festen Formulierung. Ich war wirklich mehr daran interessiert, in der die Iteration von/formatieren Teil - verbraucht eine bestimmte Anzahl von Liste Werte pro iteration. Aber in Bezug auf das ganze "Programm", Ihre Lösung wäre mehr pythonic
InformationsquelleAutor Walter Mundt
Sehr verständlich, ich denke,
InformationsquelleAutor eyquem
Einer zwei-liner basiert auf Wright:
InformationsquelleAutor ksed