Mit linq Ich würde
var top5 = array.Take(5);
Wie macht man das mit Python?
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)
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).
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.