Saya punya daftar:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
elemen maks adalah 55 (dua elemen pada posisi 9 dan 12)
Saya perlu mencari di posisi mana nilai maksimum berada. Tolong bantu.
akan memberi tahu Anda indeks instance pertama dari elemen daftar bernilai terbesar
a
.sumber
Jawaban yang dipilih (dan sebagian besar lainnya) memerlukan setidaknya dua melewati daftar.
Inilah solusi satu lulus yang mungkin menjadi pilihan yang lebih baik untuk daftar yang lebih panjang.
Diedit: Untuk mengatasi dua kekurangan yang ditunjukkan oleh @John Machin. Untuk (2) saya mencoba untuk mengoptimalkan tes berdasarkan probabilitas dugaan kemunculan dari setiap kondisi dan kesimpulan yang diizinkan dari para pendahulu. Agak sulit mencari tahu nilai inisialisasi yang tepat untuk
max_val
danmax_indices
yang bekerja untuk semua kasus yang mungkin, terutama jika maks kebetulan adalah nilai pertama dalam daftar - tapi saya percaya sekarang melakukannya.sumber
[]
seperti yang diiklankan ("Daftar pengembalian "). Kode harus sederhanaif not seq: return []
. (2) Skema pengujian dalam loop adalah sub-optimal: rata-rata dalam daftar acak, kondisival < maxval
akan menjadi yang paling umum tetapi kode di atas mengambil 2 tes, bukan satu.==
bukan 2 -elif
kondisi Anda akan selalu benar.elif
sendiri, FWIW. ;-)Saya datang dengan yang berikut dan berfungsi seperti yang Anda lihat
max
,min
dan yang lain berfungsi di daftar seperti ini:Jadi, harap pertimbangkan contoh daftar berikut ini untuk mengetahui posisi maksimum dalam daftar
a
:Menggunakan generator
enumerate
dan membuat castingPada titik ini, kita dapat mengekstraksi posisi max dengan
Di atas memberitahu kita, maksimum ada di posisi 4 dan nilainya 5.
Seperti yang Anda lihat, dalam
key
argumen, Anda dapat menemukan maksimum di atas objek yang dapat diulang dengan mendefinisikan lambda yang sesuai.Saya harap ini berkontribusi.
PD: Seperti yang dicatat oleh @PaulOyster dalam komentar. Dengan
Python 3.x
yangmin
danmax
memungkinkan kata kunci barudefault
yang menghindari pengecualian kenaikanValueError
ketika argumen adalah daftar kosong.max(enumerate(list), key=(lambda x:x[1]), default = -1)
sumber
Saya tidak dapat mereproduksi kinerja pemukulan @ SilentGhost yang dikutip oleh @martineau. Inilah upaya saya dengan perbandingan:
=== maxelements.py ===
Hasil dari laptop lama usang yang menjalankan Python 2.7 pada Windows XP SP3:
sumber
Begitulah biasanya saya melakukannya.
sumber
Anda juga dapat menggunakan paket numpy:
Ini akan mengembalikan array numpy dari semua indeks yang berisi nilai maks
jika Anda ingin mengubah ini menjadi daftar:
sumber
sumber
Juga solusi, yang memberi hanya penampilan pertama , dapat dicapai dengan menggunakan
numpy
:sumber
@shash menjawab ini di tempat lain
Yang satu lulus . Namun, ini lebih lambat daripada solusi oleh @Silent_Ghost dan, lebih dari itu, @nmichaels:
sumber
Berikut adalah nilai maks dan indeks yang muncul di:
Kemudian: untuk kepuasan @SilentGhost
sumber
heapq
- menemukan max akan ada sepele.heapq
solusi Anda , saya ragu itu akan berhasil.Gagasan serupa dengan pemahaman daftar tetapi tanpa menyebutkan
sumber
a[i]
panggilan.Hanya satu baris:
sumber
Jika Anda ingin mendapatkan indeks
n
angka terbesar dalam daftar yang dipanggildata
, Anda dapat menggunakan Pandassort_values
:sumber
sumber
Kode ini tidak secanggih jawaban yang diposting sebelumnya tetapi akan berfungsi:
daftar dalam kode di atas akan berisi semua posisi dari jumlah maksimum dalam daftar.
sumber
Anda dapat melakukannya dengan berbagai cara.
Cara konvensional yang lama adalah,
Cara lain tanpa menghitung panjang daftar dan menyimpan nilai maksimum ke variabel apa pun,
Kita bisa melakukannya dengan Pythonic dan cara yang cerdas! Menggunakan pemahaman daftar hanya dalam satu baris,
Semua kode saya dalam Python 3.
sumber