Python 入門 ノート (9)リストの操作

リストの操作

メソッド

要素の追加

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

 

コメント