def partition(n, iterable):
p = izip_longest(*([iter(iterable)] * n))
r = []
for x in p:
print(x) #I added this
s = set(x)
s.discard(None)
r.append(list(s))
return r
Dies ist eigentlich in einer Stellenausschreibung auf SO und ein Neuling zu sein, dachte ich, dass es interessant war. So erhalten Sie eine Ausgabe wie folgt aus:Was macht diese Funktion? (Python iterators)
partition(5, L)
(1, 2, 3, 4, None)
Out[86]: [[1, 2, 3, 4]]
Für mich ist das schon verwirrend, weil ich dachte izip_longest(*([iter(iterable)] * n))
die izip_longest
Funktion auf einer Liste von n identischen Iteratoren laufen würde, so würde ich zum ersten Mal eine Ausgabe von (1,1,1,1,1)
erwartet haben und dann eine Ausgabe von (2,2,2,2,2)
und so weiter.
So kurze Version meiner Frage ist, was mit dieser Linie los ist:
p = izip_longest(*([iter(iterable)] * n))
es Parsing ich gedacht hätte [iter (abzählbaren)] * n erstellt eine Liste der Länge n von identischen Iterables all auf dasselbe zeigen - das ist es, was es in der Befehlszeile tut, aber das scheint nicht zu sein, was es hier tut, basierend auf der oben gedruckten Ausgabe.
Auch ich dachte der * zu Beginn ...longest(*...
war da, da die Liste von unbekannter Länge ist aber ich denke nicht, dass das völlig Sinn macht. Was macht das erste *
Symbol innerhalb des Funktionsaufrufs? Scheint nicht so, als würde es einfach eine unbekannte Länge Liste von Argumenten anzeigen ...
Also am Ende des Tages bin ich völlig verloren. Kann mir jemand diese Syntax erklären?
Vielen Dank für jede Eingabe!
Vielen Dank für alle hilfreiche Antworten, alle. Ich bin mir nicht sicher, ob ich hier eine Antwort oder eine Frage anwende, aber es scheint mir, dass dieses Listenverständnis dasselbe für Listen und Tupel tun wird (ich realisiere, dass Iteratoren auch für Wörterbücher, benutzerdefinierte Klassen, andere Dinge gelten würden). .
) wandelt[L[i*n:(i+1)*n] for i in range(int(ceil(len(L)/float(n)))) ]
Haben Sie lesen [Wie funktioniert 'zip (* [iter (s)] * n)' Arbeit in Python] (http://stackoverflow.com/questions/2233204/how- does-zipitersn-Arbeit-in-Python)? –
es bricht eine große Liste in N Größe kleinere Listen .... filling Keine für den Fall, dass die Listenlänge nicht gleichmäßig durch N teilbar ist ... die einzige Unterliste, die keine 'None 'enthalten sollte, ist die letzte Liste –
Hinzufügen a 'print (list (p))', um zu sehen, was 'izip_longest()' getan hat. – martineau