Diberikan daftar item, ingat bahwa mode daftar adalah item yang paling sering muncul.
Saya ingin mengetahui cara membuat fungsi yang dapat menemukan mode daftar tetapi yang menampilkan pesan jika daftar tidak memiliki mode (mis., Semua item dalam daftar hanya muncul sekali). Saya ingin membuat fungsi ini tanpa mengimpor fungsi apa pun. Saya mencoba membuat fungsi saya sendiri dari awal.
assert(mode[1, 1, 1]) == None
danassert(mode[1, 2, 3, 4]) == None
. Agar angka menjadi amode
, angka itu harus muncul lebih sering daripada setidaknya satu angka lain dalam daftar, dan itu tidak boleh menjadi satu-satunya angka dalam daftar.Jawaban:
Anda dapat menggunakan
max
fungsi dan kunci. Lihat fungsi python max menggunakan 'key' dan ekspresi lambda .sumber
O(n**2)
. Melakukannya?max(lst, key=lst.count)
. (Dan saya benar-benar tidak akan meminta daftarlist
.)a = [22, 33, 11, 22, 11]; print(max(set(a), key=a.count))
kembali11
. Apakah akan selalu mengembalikan mode minimum? Dan jika ya, mengapa?Anda dapat menggunakan yang
Counter
disediakan dalamcollections
paket yang memilikimode
fungsi -esqueCatatan: Penghitung baru di python 2.7 dan tidak tersedia di versi sebelumnya.
sumber
Counter(your_list_in_here).most_common(1)[0][0]
. Jika ada lebih dari satu mode, ini mengembalikan mode arbitrer.n
paling umummodes
. Jika Counter (your_list_in_here) .most_common (1) [0] [0] memberi Anda mode pertama, bagaimana Anda mendapatkan mode lain yang paling umummode
? Ganti saja yang terakhir0
dengan1
? Seseorang dapat membuat fungsi untuk menyesuaikanmode
dengan keinginan mereka ..Python 3.4 menyertakan metode ini
statistics.mode
, jadi langsung saja:Anda dapat memiliki semua jenis elemen dalam daftar, tidak hanya numerik:
sumber
multimode
, yang mengembalikan banyak mode bila ada lebih dari satu.Mengambil daun dari beberapa perangkat lunak statistik, yaitu SciPy dan MATLAB , ini hanya mengembalikan nilai paling umum terkecil, jadi jika dua nilai muncul sama seringnya, nilai terkecil dikembalikan. Semoga sebuah contoh akan membantu:
Adakah alasan mengapa Anda tidak bisa mengikuti konvensi ini?
sumber
Ada banyak cara sederhana untuk menemukan mode list dengan Python seperti:
Atau, Anda dapat menemukan maks dengan hitungannya
Masalah dengan kedua metode tersebut adalah mereka tidak bekerja dengan banyak mode. Yang pertama mengembalikan kesalahan, sedangkan yang kedua mengembalikan mode pertama.
Untuk menemukan mode set, Anda dapat menggunakan fungsi ini:
sumber
Memperluas jawaban Komunitas yang tidak akan berfungsi ketika daftar kosong, berikut adalah kode kerja untuk mode:
sumber
Jika Anda tertarik dengan mode terkecil, terbesar, atau semua:
sumber
Saya menulis fungsi praktis ini untuk menemukan mode.
sumber
Pendek, tapi jelek:
Menggunakan kamus, sedikit tidak jelek:
sumber
Sedikit lebih lama, tetapi bisa memiliki beberapa mode dan bisa mendapatkan string dengan jumlah atau campuran tipe data terbanyak.
sumber
Agar bilangan menjadi a
mode
, itu harus muncul lebih sering daripada setidaknya satu nomor lain dalam daftar, dan itu tidak boleh menjadi satu-satunya nomor dalam daftar. Jadi, saya refactored jawaban @ mathwizurd (untuk menggunakandifference
metode) sebagai berikut:Tes ini berhasil lulus:
sumber
Kenapa tidak adil
Ini tidak memiliki beberapa pemeriksaan kesalahan yang seharusnya, tetapi itu akan menemukan mode tanpa mengimpor fungsi apa pun dan akan mencetak pesan jika semua nilai muncul hanya sekali. Ini juga akan mendeteksi beberapa item yang berbagi jumlah maksimum yang sama, meskipun tidak jelas apakah Anda menginginkannya.
sumber
Fungsi ini mengembalikan mode atau mode dari suatu fungsi berapa pun jumlahnya, serta frekuensi mode atau mode dalam kumpulan data. Jika tidak ada mode (mis. Semua item terjadi hanya sekali), fungsi mengembalikan string kesalahan. Ini mirip dengan fungsi A_nagpal di atas tetapi, menurut pendapat saya, lebih lengkap, dan menurut saya lebih mudah dipahami untuk pemula Python mana pun (seperti Anda benar-benar) membaca pertanyaan ini untuk memahami.
sumber
return 'There is no mode for this data set. All values occur only once.'
dapat diubah menjadi pesan kesalahan dengantraceback
`` if condition: next line with indent raise ValueError ('Tidak ada mode untuk kumpulan data ini. Semua nilai terjadi hanya sekali.') Berikut adalah daftar berbagai jenis kesalahan yang bisa Anda tingkatkan.Ini akan mengembalikan semua mode:
sumber
Kode sederhana yang menemukan mode daftar tanpa impor apa pun:
Dalam kasus beberapa mode, itu harus mengembalikan node minimum.
sumber
sumber
sumber
Berikut adalah fungsi sederhana yang mendapatkan mode pertama yang muncul dalam daftar. Itu membuat kamus dengan elemen daftar sebagai kunci dan jumlah kejadian dan kemudian membaca nilai dict untuk mendapatkan mode.
sumber
Jika Anda menginginkan pendekatan yang jelas, berguna untuk kelas dan hanya menggunakan daftar dan kamus dengan pemahaman, Anda dapat melakukan:
sumber
sumber
Berikut adalah bagaimana Anda dapat menemukan mean, median dan mode dari sebuah daftar:
sumber
sumber
Untuk yang mencari mode minimum, misal: kasus distribusi bi-modal, menggunakan numpy.
sumber
Mode suatu kumpulan data adalah anggota yang paling sering muncul dalam kumpulan tersebut. Jika ada dua anggota yang paling sering muncul dengan frekuensi yang sama, maka data memiliki dua mode. Ini disebut bimodal .
Jika ada lebih dari 2 mode, maka datanya disebut multimodal . Jika semua anggota dalam kumpulan data muncul dalam jumlah yang sama, maka kumpulan data tersebut tidak memiliki mode sama sekali.Fungsi berikut
modes()
dapat bekerja untuk menemukan mode dalam daftar data yang diberikan:Keluaran:
Jika kita tidak ingin mengimpor
numpy
ataupandas
memanggil fungsi apa pun dari paket-paket ini, maka untuk mendapatkan keluaran yang sama ini,modes()
fungsi dapat ditulis sebagai:sumber