Saya membutuhkan fungsi berikut:
Input : alist
Keluaran :
True
jika semua elemen dalam daftar input mengevaluasi sama satu sama lain menggunakan operator kesetaraan standar;False
jika tidak.
Kinerja : tentu saja, saya lebih suka untuk tidak mengeluarkan biaya tidak perlu.
Saya merasa akan lebih baik untuk:
- beralih melalui daftar
- membandingkan elemen yang berdekatan
- dan
AND
semua nilai Boolean yang dihasilkan
Tapi saya tidak yakin apa cara paling Pythonic untuk melakukan itu.
Kurangnya fitur hubung singkat hanya menyakitkan pada input panjang (lebih dari ~ 50 elemen) yang memiliki elemen yang tidak sama sejak awal. Jika ini terjadi cukup sering (seberapa sering tergantung pada berapa lama daftar mungkin), korsleting diperlukan. Algoritme korsleting terbaik tampaknya adalah @ KennyTM checkEqual1
. Namun, membayar biaya yang signifikan untuk ini:
- hingga 20x dalam daftar kinerja hampir identik
- kinerja hingga 2,5x pada daftar pendek
Jika input panjang dengan elemen awal yang tidak sama tidak terjadi (atau jarang terjadi), korsleting tidak diperlukan. Kemudian, sejauh ini yang tercepat adalah solusi @Ivo van der Wijk.
functools.reduce(operator.eq, a)
belum disarankan.
a == b
atau identik dengan dia is b
?