นี่คือคำถามเคล็ดลับสำหรับการเล่นกอล์ฟใน Python ซึ่งอยู่ในหัวข้อหลัก
ฉันกำลังมองหาวิธีที่สั้นที่สุดเพื่อให้ได้องค์ประกอบทั้งหมดที่พบบ่อยที่สุดของรายการใน Python ในวิธีที่สั้นที่สุด นี่คือสิ่งที่ฉันได้ลองสมมติว่ารายการอยู่ในตัวแปรที่เรียกว่าl
:
from statistics import*
mode(l)
การทำเช่นนี้จะเกิดข้อผิดพลาดหากมีหลายโหมด
max(l,key=l.count)
คืนนี้มีเพียง 1 รายการฉันต้องได้องค์ประกอบทั้งหมดที่มีค่ามากที่สุด
from collections import*
Counter(l).most_common()
ส่งคืนรายการของ tuples ของ(element, count)
เรียงตามจำนวน จากนี้ฉันสามารถดึงองค์ประกอบทั้งหมดที่มีจำนวนที่สอดคล้องกันเท่ากับครั้งแรก แต่ฉันไม่เห็นวิธีการเล่นกอล์ฟที่ดีกว่านี้มาก:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
ฉันแน่ใจว่ามีวิธีที่สั้นกว่า!
นอกจากนี้หากสามารถทำได้โดยไม่ต้องกำหนดค่าตัวแปรหรือใช้หลายครั้งl
ฉันสามารถเก็บรหัสที่เหลือไว้เป็นนิพจน์แลมบ์ดาเพื่อประหยัดไบต์ได้มากขึ้น
แก้ไข: ตามข้อเสนอแนะของ @ Uriel เราสามารถทำได้:
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
และฉันสามารถนามแฝงlist.count
สำหรับไม่กี่ไบต์:
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@Uriel ชี้ให้เห็นว่าเราจะได้รับอีกสองสามไบต์ด้วยmap
:
c=l.count;{s for s in l if c(s)==max(map(c,l))}