2020年3月23日月曜日

【リスト】リストの値の取得、追加、削除

 リストの任意の位置の値を取得する、リストに値を追加する、リストから値を削除するといったリストの操作について解説する。


1. インデックスによる要素の指定

 要素の順番を指示するインデックスにより任意の要素を取り出すことができる。インデックスは0,1,2…と先頭の要素が0となる。リストの後ろに[]で囲ったインデックスをつけることで指定できる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[0])

実行結果

りんご


print(['りんご', 'オレンジ', 'イチゴ', 'バナナ'][2])

実行結果

イチゴ


 負のインデックスを指定すると後ろから数えた要素を取り出すことができる。一番最後の要素は-1、最後から2番目は-2となる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[-1])

実行結果

バナナ


存在しない要素を指定するとエラーとなる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit[4])

実行結果

IndexError: list index out of range


インデックスで指定した要素を書き換えることが可能。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit[2] = 'ぶどう'
print(fruit)

実行結果

['りんご', 'オレンジ', 'ぶどう', 'バナナ']


2. スライスによる要素範囲の指定

 インデックスが一つの要素を指定するのに対してスライスは要素の範囲を指定できる。スライスの書式は[開始位置:終了位置:ステップ]で各項目をインデックスで指定する。インデックスは0,1,2…と先頭の要素が0となる点に注意が必要。

開始位置と終了位置を指定する場合[開始位置:終了位置]の書式となる。終了位置の要素を含まない点に注意が必要。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[4:7]) 

実行結果

[11, 13, 17]


ステップを指定することで間隔をあけて要素を指定できる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[3:9:2])

実行結果

[7, 13, 19]

開始位置のみ記入した場合そのインデックス以降の要素を指定できる。



prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[6:])

実行結果

[17, 19, 23, 29, 31]


開始位置とステップを指定すると開始位置以降ステップ毎に要素を指定。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[6::2])

実行結果

[17, 23, 31]


終了位置のみを記入した場合には、先頭から終了位置までの要素の指定となる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[:4])

実行結果

[2, 3, 5, 7]


ステップのみ指定すると全要素からステップ間隔で抽出。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[::2])

実行結果

[2, 5, 11, 17, 23, 31]


マイナスのインデックスを使うとリストの後ろからの位置指定となる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[-6:])

実行結果

[13, 17, 19, 23, 29, 31]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number[:-3])

実行結果

[2, 3, 5, 7, 11, 13, 17, 19]


3. リストの結合・要素の追加

 リストに要素を追加する、リスト同士を結合するには+演算子、appendextendを用いる。

+演算子で要素を追加。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
print(fruit + ['大根', '小松菜'])

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', '大根', '小松菜']


+演算子でリストを結合。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
vegetable = ['大根', '小松菜']
print(fruit + vegetable)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', '大根', '小松菜']


appendによる要素の追加。追加する要素を引数に取る。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append('ぶどう')
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'ぶどう']


appendでリストに複数の値を追加しようとして複数の要素を並べて引数に指定するとエラーになる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append('ぶどう', 'メロン')
print(fruit)

実行結果

TypeError: append() takes exactly one argument (2 given)


引数をリストにしてappendすることは可能だが引数が一つの要素として追加されるため、リスト内リストとなる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.append(['ぶどう', 'メロン'])
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', ['ぶどう', 'メロン']]


extendで引数をリストにすれば複数要素を追加できる。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ']
fruit.extend(['ぶどう', 'メロン'])
print(fruit)

実行結果

['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'ぶどう', 'メロン']


4. リスト要素の削除

 リストから要素を削除するにはスライスを使うかdel文、popremoveを用いる。

スライスでリストの一部を指定し元のリストに代入することで指定したインデックス以外の要素を削除したことになる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[2:]  
print(prime_number)

実行結果

[5, 7, 11, 13, 17, 19, 23, 29, 31]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[:7]  
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 13, 17]


prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number = prime_number[2:7]  
print(prime_number)

実行結果

[5, 7, 11, 13, 17]


del文では指定したインデックスの要素が削除される。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
del prime_number[5] 
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 17, 19, 23, 29, 31]


del文ではスライスで削除する範囲を指定できる。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
del prime_number[5:8]  
print(prime_number)

実行結果

[2, 3, 5, 7, 11, 23, 29, 31]


popは指定されたインデックスの要素を削除しその値を取得する。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
print(prime_number.pop(5))

実行結果

13

print(prime_number)

実行結果

[2, 3, 5, 7, 11, 17, 19, 23, 29, 31]


removeは指定した値と同じ値の要素を削除する。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number.remove(5) 
print(prime_number)

実行結果

[2, 3, 7, 11, 13, 17, 19, 23, 29, 31]


同じ値の要素が複数ある場合、最初の一つが削除される。

fruit = ['りんご', 'オレンジ', 'イチゴ', 'バナナ', 'オレンジ', 'イチゴ']
fruit.remove('オレンジ') 
print(fruit)

実行結果

['りんご', 'イチゴ', 'バナナ', 'オレンジ', 'イチゴ']


removeでリストに存在しない値を指定するとエラーになってしまうので注意が必要。

prime_number = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
prime_number.remove(60)
print(prime_number)

実行結果

ValueError: list.remove(x): x not in list


5. リスト要素の検索

 リストに特定の値が含まれているかどうか調べる方法。

countは引数の値がリストに何個含まれるかを調べる。

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.count(2))

実行結果

3


indexメソッドは引数の値がリストのどこにあるかをインデックスで返す。複数の要素がある場合は最初の要素の位置を返す。

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.index(2))

実行結果

3


リストに含まれない値をindexの引数に取るとエラーになるので注意が必要

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(numbers.index(5))

実行結果

ValueError: 5 is not in list


リストに値が含まれているかどうかを調べるには値inリストの形で記述する。戻り値はTrue/False

numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(2 in numbers)

実行結果

True


numbers = [1, 3, 7, 2, 4, 3, 6, 8, 9, 3, 2, 4, 3, 2, 6, 7]
print(5 in numbers)

実行結果

False


6. リファレンス

Python チュートリアル > 3.1.3. リスト型 (list)
Python チュートリアル > 5.1. リスト型についてもう少し

使用バージョン:Python 3.7.0

0 件のコメント:

コメントを投稿