特定の文字列と一致するリスト要素の要素位置(index)を得る
■リストのindex()メソッドの引数に検索したい値を指定すると、その値のインデックス(0始まり)を取得できる。
l = [30, 50, 10, 40, 20]
print(l.index(30))
# 0
print(l.index(20))
# 4
■文字列のfind()メソッドのように、リストに存在しない値に対して-1を返すには、例えば以下のような関数を定義する。in演算子で存在確認をしている。
関連記事: Pythonのin演算子でリストなどに特定の要素が含まれるか判定
def my_find(l, x):
if x in l:
return l.index(x)
else:
return -1
l = [30, 50, 10, 40, 20]
print(my_find(l, 30))
# 0
print(my_find(l, 100))
# -1
■リストの要素が重複している場合、index()メソッドは最初のインデックスのみを返す。
l = [10, 30, 10, 10, 20, 20]
print(l.index(10))
# 0
print(l.index(20))
# 4
source: list_index.py
すべてのインデックスを取得したい場合は、組み込み関数enumerate()とリスト内包表記を利用する。
関連記事: Python, enumerateの使い方: リストの要素とインデックスを取得
関連記事: Pythonリスト内包表記の使い方
一つだけの要素に対しては要素数一個のリストを返し、存在しない要素に対しては空のリストを返す。
print([i for i, x in enumerate(l) if x == 10])
# [0, 2, 3]
print([i for i, x in enumerate(l) if x == 20])
# [4, 5]
print([i for i, x in enumerate(l) if x == 30])
# [1]
print([i for i, x in enumerate(l) if x == 100])
# []
■リストの中の指定した要素を別の値を持つ要素と入れ替えるには、入れ替える要素のインデックスを指定して次のように要素に新しい値を代入してください。
リスト[インデックス] = 値
次の例では 2 番目の要素(インデックスは 0 から始まるので 1 )の値を別の値に変更しています。
mylist = ["Apple", "Peach", "Orange"]
print(mylist)
--> ['Apple', 'Peach', 'Orange']
# 2 番目の要素を別の値と入れ替える
mylist[1] = "Grape"
print(mylist)
--> ['Apple', 'Grape', 'Orange']
リストは変更可能なオブジェクト(ミュータブル(mutable)なオブジェクト)なので、同じオブジェクトのまま要素を別の要素に入れ替えたりすることができます。その為、要素を別の値を持つ要素に変更してもオブジェクトは同じままです。