องค์ประกอบทั่วไปของรายการใน Python


13

นี่คือคำถามเคล็ดลับสำหรับการเล่นกอล์ฟใน 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))}

ที่เกี่ยวข้องแต่ไม่ได้ทำสิ่งที่ฉันต้องการ
musicman523

คำตอบ:


5

แล้วอันนี้ละ?

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

ล้อมรอบ[*...]เพื่อรับรายการ


โอ้ใช่ฉันต้องการรายการหรือชุดที่ไม่ซ้ำกันขอบคุณ
musicman523

@ musicman523 คุณไม่อัปเดตด้วยทำไมl.count(max(l,key=l.count))? max(map(l.count,l))สั้นกว่า
Uriel

Ahhhh ฉันไม่คิดอย่างนั้นขอบคุณ!
musicman523
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.