python リスト内の全ての値が等しいか確認!1行で書けます!

リスト内の全ての値が等しいか確認する方法を紹介します。
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
その他の方法や、各方法の効率について書かれています。

コメント

タイトルとURLをコピーしました