Tôi cần chức năng sau:
Đầu vào : alist
Đầu ra :
True
nếu tất cả các yếu tố trong danh sách đầu vào đánh giá bằng nhau bằng toán tử đẳng thức chuẩn;False
nếu không thì.
Hiệu suất : tất nhiên, tôi không muốn chịu bất kỳ chi phí không cần thiết nào.
Tôi cảm thấy nó là tốt nhất để:
- lặp qua danh sách
- so sánh các yếu tố liền kề
- và
AND
tất cả các giá trị Boolean kết quả
Nhưng tôi không chắc cách Pythonic nhất để làm điều đó là gì.
Việc thiếu tính năng ngắn mạch chỉ gây tổn hại cho đầu vào dài (trên ~ 50 phần tử) có các phần tử không bằng nhau từ sớm. Nếu điều này xảy ra thường xuyên đủ (mức độ thường xuyên phụ thuộc vào thời gian của các danh sách), thì cần phải đoản mạch. Thuật toán ngắn mạch tốt nhất dường như là @KennyTM checkEqual1
. Nó trả tiền, tuy nhiên, một chi phí đáng kể cho việc này:
- hiệu suất lên tới 20 lần trong danh sách gần giống nhau
- hiệu suất lên tới 2,5 lần trong danh sách ngắn
Nếu các đầu vào dài với các phần tử không bằng nhau sớm không xảy ra (hoặc hiếm khi xảy ra), thì không cần phải đoản mạch. Sau đó, nhanh nhất là giải pháp @Ivo van der Wijk.
functools.reduce(operator.eq, a)
được đề xuất.
a == b
hoặc giống hệt như tronga is b
?