Je le ferais avec LINQ
Comment faire avec Python ?
Je le ferais avec LINQ
Comment faire avec Python ?
Vous ne pouvez pas couper un générateur directement en python. Vous pouvez utiliser itertools.islice()
comme une fonction d'aide pour le faire. itertools.islice(generator, start, stop, step)
Rappelez-vous, le découpage d'un générateur de gaz d'échappement partiellement. Si vous souhaitez conserver l'ensemble de générateur intacte, peut-être de le transformer en un tuple ou une liste premier: result = tuple(generator)
Pour une liste normale, vous pouvez simplement utiliser régulière de découpage. my_list[start:stop:step]
Vous pouvez omettre "l'étape", ou démarrer/arrêter dans l'une de ces tranches d'implémentations.
my_list[:5] # grab the first five elements
my_list[-5:] # grab the last five elements
# (negative list indices start from the right side)
import itertools
itertools.islice(my_list, 0, 5) # grab the first five elements
À mon goût, il est également très concis d’associer zip() à range(n), qui fonctionne gentil sur les générateurs aussi bien et semble être plus souples pour les changements en général.
Dans Python 3, tant zip() que range() sont des générateurs. Python 2, vous pouvez toujours rapporter les meilleurs éléments pour créer un générateur.
Entendez-vous le premier N éléments, ou les N plus grands éléments?
Si vous souhaitez que la première:
top5 = iterable[:5]
Cela fonctionne aussi pour le plus grand N éléments, en supposant que votre itérable est triée dans l'ordre décroissant. (Votre LINQ exemple semble assumer cette).
Si vous voulez la plus grande, et il n'est pas triée, la solution la plus évidente consiste à les trier d'abord:
l = list(iterable)
l.sort(reverse=True)
top5 = l[:5]
Pour un plus performant solution, utiliser un min-tas (merci Thijs):
import heapq
top5 = heapq.nlargest(5, iterable)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.