Aşağıdaki fonksiyona ihtiyacım var:
Giriş : alist
Çıktı :
True
giriş listesindeki tüm elemanlar standart eşitlik operatörünü kullanarak birbirine eşit olarak değerlendirilirse;False
aksi takdirde.
Performans : elbette, gereksiz ek yüke maruz kalmamayı tercih ederim.
Ben en iyisi olacağını hissediyorum:
- liste boyunca yineleme
- bitişik elemanları karşılaştır
- ve
AND
sonuçta elde edilen tüm Boolean değerleri
Ama bunu yapmanın en Pitonik yolunun ne olduğundan emin değilim.
Kısa devre özelliğinin olmaması, yalnızca eşit olmayan öğelere sahip uzun bir girişe (~ 50'den fazla eleman) zarar verir. Bu yeterince sık meydana gelirse (listelerin ne kadar uzunluğuna bağlı olabilir), kısa devre gereklidir. En iyi kısa devre algoritması @KennyTM gibi görünüyor checkEqual1
. Bununla birlikte, bunun için önemli bir maliyet ödüyor:
- 20x'e kadar performansta neredeyse aynı listeler
- Kısa listelerde 2,5 kata kadar performans
Erken eşit olmayan öğelere sahip uzun girişler olmazsa (veya nadiren yeterli değilse), kısa devre gerekmez. Sonra, en hızlısı @Ivo van der Wijk çözümüdür.
functools.reduce(operator.eq, a)
.
a == b
veya özdeşa is b
?