Apabila bilangan elemen yang ditemui agak kecil, fungsi nlargest() dan nsmallest() adalah sangat sesuai. Jika anda hanya ingin mencari elemen minimum atau maksimum unik (N=1), lebih pantas menggunakan fungsi min() dan max(). Begitu juga, jika saiz N hampir dengan saiz koleksi, biasanya lebih cepat untuk mengisih koleksi dahulu dan kemudian menggunakan operasi menghiris (sorted(items)[:N] atau sorted(items)[-N:] ). Fungsi nlargest() dan nsmallest() perlu digunakan dalam situasi yang betul untuk memanfaatkannya (jika N hampir dengan saiz set, lebih baik menggunakan operasi pengisihan).
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)]
Gelung pertama untuk mencari semua puncak dan palung, kemudian cari lima teratas
Anda boleh cuba menggunakan modul
heapq
.Gelung pertama untuk mencari semua puncak dan palung, kemudian cari lima teratas