リストの操作
メソッド
要素の追加
append 要素を一つ末尾に一つ追加
>>> n = [1, 2, 3] >>> n.append(100) >>> n [1, 2, 3, 100]
リストに要素を追加します。
n.append(100)
と書きます。append (関数)に . (ドット)につなげて書きます。これを メソッド と呼びます。
append(n, 100)ではありません。
extend 複数の要素を末尾に追加
appendでは、複数の要素を追加できます。
追加できる要素はリストである必要があります。
>>> n = [1, 2, 3] >>> n.extend([4, 5, 6]) >>> n [1, 2, 3, 4, 5, 6]
結合 +
extendと同じようなことが出来る + 演算子があります。
>>> n = [1, 2, 3] >>> m = [4, 5, 6] >>> n + m [1, 2, 3, 4, 5, 6]
また、+= を使うとより短く書けます。
>>> n = [1, 2, 3] >>> n += [4, 5, 6] >>> n [1, 2, 3, 4, 5, 6]
繰り返し *
* アスタリスクを使うとリストを繰り返して追加できます。
>>> n [1, 2, 3] >>> n = n * 2 >>> n [1, 2, 3, 1, 2, 3]
insert 途中に要素を追加
2(インデックス番号1)の前に4を追加したい場合、以下の様に書きます。
>>> n = [1, 2, 3] >>> n.insert(1, 4) >>> n [1, 4, 2, 3]
要素の削除
clear 全ての要素を削除
>>> scores = [10, 20, 30, 20 ,40] >>> scores.clear() >>> scores []
全ての要素が削除されます。結果リストは空になります。
remove 値を指定して削除
>>> scores = [10, 20, 30, 20 ,40] >>> scores.remove(20) >>> scores [10, 30, 20, 40]
scores.remove(20) で20を指定して削除します。
20は二つあります。すると最初の20のみ削除されます。
特定の値をすべて削除するメソッドは用意されていないので、他のところで述べます。
もう一度見てみます。
>> n = [1, 2, 2, 2, 3]
>>> n.remove(2)
>>> n
[1, 2, 2, 3]
#最初の2が削除されました。
>>> n.remove(2)
>>> n.remove(2)
>>> n
[1, 3]
♯全ての2が削除されました。
>>> n.remove(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
♯存在しない2を削除しようとしたのでValueErrorが返りました。
インデックスを指定して削除
pop インデックスを指定して削除(削除した値を返します)
>>> scores = [10, 20, 30, 20, 40] >>> scores [10, 20, 30, 20, 40] >>> popped_item = scores.pop(2) >>> popped_item 30
pop で削除した値は戻り値として poped_item に代入しています。
scores のインデックス2番目の値は30です。popped_item として30が表示されました。
pop の引数を省略すると末尾の要素を指定したことになります。
>>> n [1, 2, 3] >>> n.pop() 3 >>> n [1, 2]
del(削除) インデックスを指定して削除(削除した値を返さない)
del は 特殊で、
del scores[2]
という書き方をします。
また pop と異なり、削除した要素を取得できません。
>>> scores = [10, 20, 30, 20, 40]
>>> del scores[2]
>>> scores
[10, 20, 20, 40]
また、間違って del scores と書いてしまうと、scores の存在自体が無くなり、エラーになります。
>>> scores = [10, 20, 30, 20, 40] >>> del scores >>> scores Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'scores' is not defined
スライスによる書換(文字列では出来ないが、リストではOK)
リスト nums の2番目からから4番目までの範囲の要素を書換えたいとき以下の様に書きます。
nums[2:5]はリストの要素2,3,4を示すことになります。これを200,300,400に書換えます。
>>> nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums[2:5] = [200, 300, 400] >>> nums [0, 1, 200, 300, 400, 5, 6, 7, 8, 9]
[2:5]の範囲の要素の数3つに対して、代入する要素の数を4つにしてもうまくいきます。
>>> nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums[2:5] = [200, 300, 400 ,500] >>> nums [0, 1, 200, 300, 400, 500, 5, 6, 7, 8, 9]
[2:2]とすると、少しわかりずらいですが、2から始まり2以降を除外した範囲になるので以下のようになります。
>>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums[2:2] = [1.5] >>> nums [0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, 9]
[:3]は最初からはじまり3以降を除外します。
[:3] = [] は要素0,1,2をからにします。
>>> nums =[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> nums[:3] = [] >>> nums [3, 4, 5, 6, 7, 8, 9]
逆に[3:] = [] は要素3,4,5,6,7,8,9を削除します。
>>> nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> nums[3:] = []
>>> nums
[0, 1, 2]
スライスは、見てきたように insert() や pop() や del() が出来ることを、まとめて操作できます。
スライス記法によるリストの切り出し
nums[2:5] を sliced_list という変数に代入できます。この変数は元リスト(nums)とは別に新しいリストとして独立して使うことが出来ます。
>>> nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> sliced_list = nums[2:5] >>> nums [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> sliced_list [100, 200, 300]
以下編集中
>> s[0] = 'X'
>>> s
['X', 'b', 'c', 'd', 'e', 'f', 'g']
>> s[2:5]
['c', 'd', 'e']
>>> s[2:5] = ['C', 'D', 'E']
>>> s
['X', 'b', 'C', 'D', 'E', 'f', 'g']
>>> s[2:5] = []
>>> s
['X', 'b', 'f', 'g']
>> s[:]
['X', 'b', 'f', 'g']
>>> s[:] = []
>>> s
[]
スライス
>>> l[0:2]
[1, 20]
>>> l[:2]
[1, 20]
>>> l[2:5]
[4, 50, 2]
>>> l[2:]
[4, 50, 2, 1, 2]
>>> l[:]
[1, 20, 4, 50, 2, 1, 2]
文字数
>> len(l)
7
型
>> type(l)
<class 'list'>
>>> list('abcdefg')
['a', 'b', 'c', 'd', 'e', 'f', 'g']
エラー
>>> l[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
飛ばし
>>> n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> n[::2]
[1, 3, 5, 7, 9]
>>> n[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
ネスト
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[1]
[1, 2, 3]
>>> x[0][1]
'b'
>>> x[1][2]
3
コメント