Mit linq Ich würde
var top5 = array.Take(5);
Wie macht man das mit Python?
top5 = array[:5]
array[start:stop:step]
array[start:]
, array[:stop]
, array[::step]
import itertools
top5 = itertools.islice(my_list, 5) # grab the first five elements
Sie können einen Generator nicht direkt in Python zerschneiden. itertools.islice()
verpackt ein Objekt in einen neuen Slicing-Generator mit der Syntax itertools.islice(generator, start, stop, step)
Denken Sie daran, dass ein Generator durch Aufschneiden teilweise erschöpft wird. Wenn Sie den gesamten Generator intakt lassen wollen, wandeln Sie ihn vielleicht zuerst in ein Tupel oder eine Liste um, etwa so: result = tuple(generator)
@Shaikovskys Antwort ist ausgezeichnet, aber ich wollte einige Punkte klarstellen.
[next(generator) for _ in range(n)]
Dies ist der einfachste Ansatz, wirft aber StopIteration
wenn der Generator vorzeitig erschöpft ist.
Auf der anderen Seite ergeben die folgenden Ansätze bis zu n
was unter vielen Umständen vorzuziehen ist:
Liste: [x for _, x in zip(range(n), records)]
Generator: (x for _, x in zip(range(n), records))
Für meinen Geschmack ist es auch sehr prägnant, die zip()
con xrange(n)
(oder range(n)
in Python3), was auch bei Generatoren gut funktioniert und generell flexibler für Änderungen zu sein scheint.
# Option #1: taking the first n elements as a list
[x for _, x in zip(xrange(n), generator)]
# Option #2, using 'next()' and taking care for 'StopIteration'
[next(generator) for _ in xrange(n)]
# Option #3: taking the first n elements as a new generator
(x for _, x in zip(xrange(n), generator))
# Option #4: yielding them by simply preparing a function
# (but take care for 'StopIteration')
def top_n(n, generator):
for _ in xrange(n):
yield next(generator)
Die Antwort auf die Frage, wie man das macht, finden Sie aquí
>>> generator = (i for i in xrange(10))
>>> list(next(generator) for _ in range(4))
[0, 1, 2, 3]
>>> list(next(generator) for _ in range(4))
[4, 5, 6, 7]
>>> list(next(generator) for _ in range(4))
[8, 9]
Beachten Sie, dass der letzte Aufruf nach den nächsten 4 fragt, obwohl nur noch 2 übrig sind. Die Verwendung der list()
代わりに []
bewirkt, dass das Verständnis auf der StopIteration
Ausnahme, die ausgelöst wird durch next()
.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.