Saya membutuhkan fungsi berikut:
Input : alist
Keluaran :
Truejika semua elemen dalam daftar input mengevaluasi sama satu sama lain menggunakan operator kesetaraan standar;Falsejika 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
ANDsemua 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 == batau identik dengan dia is b?