Lorsque le nombre d'éléments à trouver est relativement faible, les fonctions nlargest() et nsmallest() sont très adaptées. Si vous souhaitez simplement trouver l'élément minimum ou maximum (N=1) unique, il est plus rapide d'utiliser les fonctions min() et max(). De même, si la taille de N est proche de la taille de la collection, il est généralement plus rapide de trier d'abord la collection puis d'utiliser l'opération de découpage (sorted(items)[:N] ou sorted(items)[-N:] ). Les fonctions nlargest() et nsmallest() doivent être utilisées dans les bonnes situations pour en profiter (si N est proche de la taille de l'ensemble, il vaut mieux utiliser des opérations de tri).
nums = [1,2,3,2,4,5,4,3,2,1,8,9,10,11,10,9,8]
peaks = []
troughs = []
for idx in range(1, len(nums)-1):
if nums[idx-1] < nums[idx] > nums[idx+1]:
peaks.append((idx, nums[idx]))
if nums[idx-1] > nums[idx] < nums[idx+1]:
troughs.append((idx, nums[idx]))
print(peaks) # [(2, 3), (5, 5), (13, 11)]
print(troughs) # [(3, 2), (9, 1)]
Faites d'abord une boucle pour trouver tous les pics et tous les creux, puis trouvez les cinq premiers
Vous pouvez essayer d'utiliser le module
heapq
.Faites d'abord une boucle pour trouver tous les pics et tous les creux, puis trouvez les cinq premiers