Jika saya ingin nilai maksimum dalam daftar, saya bisa menulis max(List)
, tetapi bagaimana jika saya juga membutuhkan indeks nilai maksimum?
Saya dapat menulis sesuatu seperti ini:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Tapi itu terlihat membosankan bagi saya.
Dan jika saya menulis:
List.index(max(List))
Maka itu akan mengulangi daftar dua kali.
Apakah ada cara yang lebih baik?
Jawaban:
Ada banyak opsi, misalnya:
sumber
key
Fungsi ini hanya digunakan untuk memutuskan elemen mana yang maksimal. Elemen tidak berubah.key=lambda e: e[1]
dan karenanya menghindari impor?itemgetter()
lebih cepat, dan menghindari impor bukanlah tujuan yang layak dikejar. Menghindari ketergantungan eksternal dapat bermanfaat dalam beberapa kasus, tetapi impor dari perpustakaan standar adalah masalah.Saya pikir jawaban yang diterima bagus, tetapi mengapa Anda tidak melakukannya secara eksplisit? Saya merasa lebih banyak orang akan memahami kode Anda, dan itu sesuai dengan PEP 8:
Metode ini juga sekitar tiga kali lebih cepat daripada jawaban yang diterima:
Hasil saat dijalankan di komputer saya:
Set lainnya:
sumber
numpy.argmax()
, yang merupakan 30 kali lebih cepat pada mesin saya. Jika daftar berisi objek yang lebih rumit dari sekadar angka, pendekatan dalam jawaban saya bisa menjadi lebih cepat. Keuntungan lain dari pendekatan itu adalah dapat digunakan untuk iterator yang sewenang-wenang, tidak hanya untuk daftar.Jawaban ini 33 kali lebih cepat dari @Escualo dengan anggapan bahwa daftarnya sangat besar, dan dengan asumsi bahwa itu sudah menjadi np.array (). Saya harus menolak jumlah uji coba karena tes ini melihat 10.000.000 elemen bukan hanya 100.
Hasil di komputer saya:
sumber
numpy.argmax
tampilannya luar biasa sampai Anda membiarkannya memproses daftar python standar . Kemudian kecepatan terletak di antara versi eksplisit dan implisit. Saya kiranp.array
tidak hanya membuat daftar tetapi menyimpan beberapa info tambahan di dalamnya - seperti misalnya nilai min dan maks (hanya hipotesis).Dengan perpustakaan bawaan Python, sangat mudah:
Ini memberitahu Anda
max
untuk menemukan nomor terbesar dalam daftar[0, 1, 2, ..., len(a)]
, menggunakan fungsi kustomlambda x: a[x]
, yang mengatakan itu0
sebenarnya2
,1
sebenarnya9
, dll.sumber
sumber
max
mengetahui untuk mengambil item pertama dari setiap tuple (v
) ke dalam perhitungan saat menghitung nilai maksimum?Saya akan menyarankan cara yang sangat sederhana:
Semoga ini bisa membantu.
sumber
Jika nilai maksimum hadir lebih dari satu kali dan Anda ingin mendapatkan semua indeks,
sumber
Mungkin Anda perlu daftar yang disortir?
Coba ini:
sumber
sorted_list
belum indeks tetapi nilai, jadi itu tidak akan berhasil.maaf telah menghidupkan kembali utas ini, tetapi menganggap metode saya layak ditambahkan.
Nama daftar dalam contoh ini 'daftar'
Itu akan mencetak nilai tertinggi dalam daftar semudah!
list.sort()
mengurutkan daftar berdasarkan nilai item dalam tabel ASCII , jadi secara efektif mengurutkan daftar terendah ke tertinggi. Saya kemudian hanya mencetak nilai terakhir dalam daftar (yang akan menjadi angka terbesar) dengan menggunakanprint(list[-1])
.Semoga ini membantu!
sumber
Berikut ini adalah solusi lengkap untuk pertanyaan Anda menggunakan fungsi bawaan Python:
sumber