Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
リスト.index() / リスト.count() / in演算子
リスト内の要素を検索したり、特定の値が含まれるかどうかを確認するメソッドと演算子です。
構文
# 値と一致する最初の要素のインデックスを返します。 リスト.index(値, 開始=0, 終了=len(リスト)) # 値と一致する要素の個数を返します。 リスト.count(値) # リストに値が含まれるか確認します(True / False)。 値 in リスト 値 not in リスト
関数一覧
| メソッド・演算子 | 概要 |
|---|---|
| list.index(x, start, end) | リスト内で最初に値 x が見つかったインデックスを返します。見つからない場合は ValueError が発生します。 |
| list.count(x) | リスト内で値 x と一致する要素の個数を返します。存在しない場合は 0 を返します。 |
| x in list | リストに値 x が含まれる場合は True、含まれない場合は False を返します。 |
| x not in list | リストに値 x が含まれない場合は True、含まれる場合は False を返します。 |
サンプルコード
# index() で要素のインデックスを取得します。
fruits = ["りんご", "みかん", "ぶどう", "みかん", "もも"]
print(fruits.index("みかん")) # 1(最初に見つかったインデックス)
# 検索範囲を指定します(開始インデックス2以降を検索)。
print(fruits.index("みかん", 2)) # 3(インデックス2以降で最初に見つかった位置)
# 存在しない値を検索すると ValueError が発生します。
try:
fruits.index("いちご")
except ValueError:
print("いちご はリストにありません。")
# in 演算子で存在確認してから index() を使うのが安全です。
target = "ぶどう"
if target in fruits:
print(f"{target} のインデックス: {fruits.index(target)}")
# count() で値の出現回数を調べます。
nums = [1, 2, 2, 3, 2, 4, 5, 2]
print(nums.count(2)) # 4(2が4回出現します)
print(nums.count(9)) # 0(9は存在しないため 0 を返します)
# 重複を調べる実用例です。
answers = ["A", "B", "A", "C", "B", "A"]
print(f"Aを選んだ人: {answers.count('A')}人")
print(f"Bを選んだ人: {answers.count('B')}人")
print(f"Cを選んだ人: {answers.count('C')}人")
# in 演算子で要素の存在確認をします。
shopping = ["牛乳", "卵", "パン", "バター"]
print("卵" in shopping) # True
print("チーズ" in shopping) # False
print("チーズ" not in shopping) # True
# 条件分岐での典型的な使い方です。
if "牛乳" in shopping:
print("牛乳はリストに含まれています。")
# リストが空かどうかを確認します。
if not shopping:
print("買い物リストが空です。")
else:
print(f"{len(shopping)}個のアイテムがあります。")
# すべての要素が条件を満たすか確認します(all, any との組み合わせ)。
scores = [80, 90, 75, 88]
print(all(s >= 60 for s in scores)) # True(全員が60点以上)
print(any(s >= 90 for s in scores)) # True(90点以上が1人以上)
概要
『index()』は最初に一致した要素のインデックスを返します。値が存在しない場合は ValueError が発生するため、使用前に『in』演算子で存在確認を行うか、try-except で例外を処理することを推奨します。
『in』演算子はリストの全要素を順番に比較する線形探索(O(n))を行います。大量のデータを頻繁に検索する場合は、リストの代わりに『set』(集合)を使うと平均O(1)で検索できます。検索が主目的のデータには、リストよりセットや辞書の方が適しています。
リストをソートした後に検索を行う場合は、Pythonの標準ライブラリ『bisect』モジュールを使った二分探索(O(log n))がより高速です。要素の並べ替えについては『リスト.sort() / リスト.reverse()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。