Các yếu tố phổ biến nhất của danh sách trong Python


13

Đây là một câu hỏi mẹo để chơi gôn trong Python, chủ đề chính.

Tôi đang tìm cách ngắn nhất để có được tất cả các yếu tố phổ biến nhất của danh sách trong Python, theo cách ngắn nhất có thể. Đây là những gì tôi đã thử, giả sử danh sách nằm trong một biến có tên l:

from statistics import*
mode(l)

Điều này sẽ gây ra lỗi nếu có nhiều chế độ.

max(l,key=l.count)

Điều này chỉ trả về 1 mục, tôi cần có được tất cả các yếu tố có số lượng lớn nhất.

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

Điều này trả về một danh sách các bộ (element, count), được sắp xếp theo số lượng. Từ điều này, tôi có thể kéo tất cả các yếu tố có số lượng tương ứng bằng số đầu tiên, nhưng tôi không thấy cách nào để chơi gôn tốt hơn nhiều như sau:

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

Tôi chắc chắn có một cách ngắn hơn!

Ngoài ra, nếu nó có thể được thực hiện mà không cần gán biến hoặc sử dụng nhiều lần l, tôi có thể giữ phần còn lại của mã dưới dạng biểu thức lambda để lưu nhiều byte hơn.

Chỉnh sửa: Đề xuất của Per @ Uriel, chúng tôi có thể làm:

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

Và tôi có thể bí danh list.countcho một vài byte:

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

@Uriel chỉ ra rằng chúng ta có thể nhận thêm một vài byte với map:

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

Liên quan , nhưng không làm những gì tôi cần
Musicman523

Câu trả lời:


5

Cái này thì sao?

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

Kèm theo [*...]để có được một danh sách.


Ồ đúng rồi, tôi cần một danh sách hoặc bộ độc đáo, cảm ơn
musicman523

@ musicman523 tại sao bạn cập nhật l.count(max(l,key=l.count))? max(map(l.count,l))ngắn hơn
Uriel

Ahhhh tôi không nghĩ về điều đó, cảm ơn bạn!
sĩ523
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.