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.count
untuk 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))}
Jawaban:
Bagaimana dengan yang ini?
Lekatkan
[*...]
untuk mendapatkan daftar.sumber
l.count(max(l,key=l.count))
?max(map(l.count,l))
lebih pendek