次の機能が必要です。
入力:alist
出力:
True
入力リストのすべての要素が標準の等価演算子を使用して互いに等しいと評価された場合。False
さもないと。
パフォーマンス:もちろん、不要なオーバーヘッドが発生しないようにします。
私はそれが最善だと思います:
- リストを反復する
- 隣接する要素を比較する
- と
AND
すべての結果のブール値
しかし、それを行うための最もPythonicな方法が何かはわかりません。
ショートサーキット機能の欠如は、早い段階で等しくない要素を持つ長い入力(約50要素以上)でのみ害を及ぼします。これが頻繁に発生する場合(どのくらいの頻度がリストの長さに依存するか)、短絡が必要です。最良の短絡アルゴリズムは@KennyTMのようですcheckEqual1
。ただし、これにはかなりの費用がかかります。
- パフォーマンスがほぼ同じリストで最大20倍
- ショートリストのパフォーマンスは最大2.5倍
初期の不均等な要素を持つ長い入力が発生しない場合(または十分にまれにしか発生しない場合)、短絡は必要ありません。次に、最も速いのは@Ivo van der Wijkソリューションです。
functools.reduce(operator.eq, a)
ていますが、提案されていないことに驚いています。
a == b
か、またはと同じa is b
ですか?