Elemen paling umum dari daftar di Python


13

Ini adalah pertanyaan kiat untuk bermain golf di Python, yang merupakan topik utama.

Saya mencari cara terpendek untuk mendapatkan semua elemen paling umum dari daftar di Python, dengan cara sesingkat mungkin. Inilah yang saya coba, dengan asumsi daftar dalam variabel yang disebut l:

from statistics import*
mode(l)

Ini menimbulkan kesalahan jika ada beberapa mode.

max(l,key=l.count)

Ini hanya mengembalikan 1 item, saya harus mendapatkan semua elemen dengan jumlah terbesar.

from collections import*
Counter(l).most_common()

Ini mengembalikan daftar tupel (element, count), diurutkan berdasarkan hitungan. Dari sini saya bisa menarik semua elemen yang hitungannya sama dengan yang pertama, tapi saya tidak melihat cara bermain golf ini jauh lebih baik daripada:

from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]

Saya yakin ada cara yang lebih singkat!

Juga, jika itu dapat dilakukan tanpa penugasan variabel atau beberapa penggunaan l, saya dapat menyimpan sisa kode sebagai ekspresi lambda untuk menyimpan lebih banyak byte.

Sunting: Per saran Uriel, kita dapat melakukan:

{s for s in l if l.count(s)==l.count(max(l,key=l.count))}

Dan saya dapat alias list.countuntuk beberapa byte:

c=l.count;{s for s in l if c(s)==c(max(l,key=c))}

@Uriel menunjukkan bahwa kita bisa mendapatkan beberapa byte lagi dengan map:

c=l.count;{s for s in l if c(s)==max(map(c,l))}

Terkait , tetapi tidak melakukan apa yang saya butuhkan
musicman523

Jawaban:


5

Bagaimana dengan yang ini?

c=l.count;{x for x in l if c(x)==max(map(c,l))}

Lekatkan [*...]untuk mendapatkan daftar.


Oh benar, saya perlu daftar atau set yang unik, terima kasih
musicman523

@ musicman523 mengapa Anda memperbarui l.count(max(l,key=l.count))? max(map(l.count,l))lebih pendek
Uriel

Ahhhh aku tidak memikirkan yang itu, terima kasih!
musicman523
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.