455 Stimmen

Wie entnehme ich die ersten N Einträge aus einem Generator oder einer Liste?

Mit linq Ich würde

var top5 = array.Take(5);

Wie macht man das mit Python?

10voto

Thomas Punkte 160390

Meinen Sie die erste N Elemente, oder die N größte Gegenstände?

Wenn Sie den ersten wollen:

top5 = sequence[:5]

Dies funktioniert auch für die größten N Elemente, vorausgesetzt, dass Ihre Reihenfolge absteigend sortiert ist. (Ihr LINQ-Beispiel scheint dies ebenfalls anzunehmen.)

Wenn Sie den größten Wert suchen und dieser nicht sortiert ist, ist die naheliegendste Lösung, ihn zuerst zu sortieren:

l = list(sequence)
l.sort(reverse=True)
top5 = l[:5]

Für eine performantere Lösung verwenden Sie einen Min-Heap (danke Thijs):

import heapq
top5 = heapq.nlargest(5, sequence)

3voto

G M Punkte 17276

Mit itertools erhalten Sie ein weiteres Generatorobjekt, so dass Sie in den meisten Fällen einen weiteren Schritt benötigen, um die ersten N Elemente ( N ). Es gibt mindestens zwei einfachere Lösungen (etwas weniger effizient in Bezug auf die Leistung, aber sehr praktisch), um die Elemente aus einer generator :

Verwendung des Listenverständnisses:

first_N_element=[generator.next() for i in range(N)]

Ansonsten:

first_N_element=list(generator)[:N]

Wo N ist die Anzahl der Elemente, die Sie nehmen wollen (z. B. N=5 für die ersten fünf Elemente).

-8voto

Bala R Punkte 104615

Dies sollte funktionieren

top5 = array[:5]

CodeJaeger.com

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.

Powered by:

X