リスト内の全ての値が等しいか確認する方法を紹介します。
all関数やcount関数を利用して1行で書けます。
最初の要素と一致する要素数をカウントする方法(count関数)
l_same = [1, 1, 1] l_diff = [2, 1, 1] print(l_same.count(l_same[0]) == len(l_same)) print(l_diff.count(l_diff[0]) == len(l_diff)) """出力 True False """
- l_same.count(l_same[0])により、リストの最初の要素と一致する要素数を求めています。
- l_same.count(l_same[0]) == len(l_same)により、リストの最初の要素と一致する要素数が、リストの要素数「len(l_same)」と等しいか判定しています。等しい時、Trueを返します。
- Trueが返る時、全ての要素の値は等しいです(全ての要素がリストの最初の要素と一致)。
最初の要素と各要素を比較する方法(all関数)
l_same = [1, 1, 1] l_diff = [2, 1, 1] print(all(val == l_same[0] for val in l_same)) print(all(val == l_diff[0] for val in l_diff)) """出力 True False """
- ジェネレータ式(*1)を利用して、リストの最初の要素が各要素と一致しているか判定しています。一致している時、ジェネレータ式が返すイテレータの要素にTrueが追加されます。
- 全てのイテレータの要素がTrueである時、all関数はTrueを返します。
(*1)
ジェネレータ式は「(val == l_same[0] for val in l_same)」の部分です。
ジェネレータ式は()で囲まれている必要がありますが、関数の()でも問題ありません(関数型プログラミング HOWTO — Python 3.9.4 ドキュメント 参照)。
参考
python – Check if all elements in a list are identical – Stack Overflow
その他の方法や、各方法の効率について書かれています。
コメント