【Python のデータ型】リストの操作

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

基本

リスト型の基本

【Python のデータ型】リスト型の基本

リストの内容の変更

l = ['pen', 'gum', 'scale', 'triangle', 'marker']

l[0] = 'pencil'
print(l)

リストの値をまとめて変更

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l[1:4] = ['eraser', 'ruler', 'compass']
print(l)

結果:

['pen', 'eraser', 'ruler', 'compass', 'marker']

リストの範囲記法に対して代入式を使えば、指定した範囲の値をまとめて書き換えられます。

リストの指定範囲を削除

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l[1:4] = []
print(l)

結果:

['pen', 'marker']

リストの範囲記法に対して、空のリストを代入すると、その範囲の値を削除したリストが得られます。

リストの末尾に値を追加

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l.append('compass')

print(l)

結果:

['pen', 'gum', 'scale', 'triangle', 'marker', 'compass']

リストの変数名.append() メソッドは、リストの変数名で指定したリストの末尾に値を追加します。メソッドはこのように変数(オブジェクト).関数(メソッド)名という形式になっており、指定した変数のオブジェクトを操作、またはそのデータを利用した処理を行います。

なお、append メソッドを使わずに、

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l[5] ='compass'

結果:

IndexError                                Traceback (most recent call last)
Cell In [8], line 2
      1 l = ['pen', 'gum', 'scale', 'triangle', 'marker']
----> 2 l[5] ='compass'
      4 print(l)

IndexError: list assignment index out of range

と、 元々あるリストにはないインデックスを指定することになってしまうので、IndexError が発生してしまいます。

リストの先頭や好きな位置に値を追加

リストの先頭に追加

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l.insert(0, 'compass')
print(l)

結果:

['compass', 'pen', 'gum', 'scale', 'triangle', 'marker']

insert メソッドは第一引数がインデックス(ただし[]角括弧はいらない)、第二引数に追加する値を指定する

リストの任意の位置に追加

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l.insert(3, 'compass')
print(l)

結果:

['pen', 'gum', 'scale', 'compass', 'triangle', 'marker']

第一引数のインデックスを変更し、任意の位置に値を追加できる

insert メソッドの第二引数にリストを追加した場合

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
l.insert(3, ['compass', 'ruler'])
print(l)

結果:

['pen', 'gum', 'scale', ['compass', 'ruler'], 'triangle', 'marker']

エラーとはならないが、二次元配列となるので期待した結果と違うこと場合もあり、注意が必要。

リスト同士の結合

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
m = ['apple', 'banana', 'pear']
l = l + m
print(l)

結果:

['pen', 'gum', 'scale', 'triangle', 'marker', 'apple', 'banana', 'pear']

+ 加算演算子でリスト同士を結合できる

extend メソッドの利用

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
m = ['apple', 'banana', 'pear']
l.extend(m)
print(l)

結果:

['pen', 'gum', 'scale', 'triangle', 'marker', 'apple', 'banana', 'pear']

リストに指定された値があるかを判定

in 演算子

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
print('scale' in l)

結果:

True

含まれているか判定したい値 in 判定に使うリスト という順序で記述。英語の文法と同様。bool 型で値が含まれていたらTrue, 含まれていなければ False となるため、 if 構造の判定にも使用できる。

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
if 'scale' in l:
    print('I have a scale!')
else:
    print("I don't have a scale!")

結果:

I have a scale!

個数を返す count メソッド

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
print(l.count('pen'))

結果:

3

インデックスを返す indexメソッド

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
print(l.index('scale'))

結果:

2

見つからない場合、 Error となるので(-1 などの値ではない) if 構造で値が含まれているかどうか分からない場合は使えず、 in 演算子やcount メソッドで判定してから使うか、エラーハンドリングを行う必要がある。

リストをスタックとして扱う

スタックとは、 LIFO (Last In First Out 後入れ先出し)の性質を持つデータ構造のこと。現実世界では、トランプなどのカードを重ねて積み上げた状態にたとえられます。下からカードを重ねていって、一番上から取っていく形式です。

スタックとしてデータを取得する pop メソッド

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
print(l.pop())
print(l)

結果:

marker
['pen', 'gum', 'scale', 'triangle']

リスト末尾の値が取り出され、元のリストから削除される。

スタックとしてデータを追加する

スタックの場合、 push (プッシュ)と言いますが、リスト型を利用する場合は先述の append メソッドを使うと同じ結果となる

リストをキューとして使う

キューとは、 FIFO (First In First Out 先入れ先出し)の性質を持つデータ構造のこと。現実世界では、コンビニのドリンク冷蔵庫のように、バックヤードから投入した商品が店舗の先頭側に順番に並べられるような構造です。待ち行列とも言われ、単純にお店に並ぶ行列を想像しても大丈夫です。

キューとしてデータを取得する pop(0)

キューからデータを取り出すことを dequeue と言いますが、リストを代用する場合は pop メソッドの引数に 0 を指定して先頭から pop します。

l = ['pen', 'gum', 'scale', 'triangle', 'marker']
print(l.pop(0))
print(l)

結果:

pen
['gum', 'scale', 'triangle', 'marker']

リストの先頭から値が取り出され、元のリストからは削除されている。

キューとしてデータを追加する

キューにデータを追加することをエンキューと言いますが、こちらも append メソッドで代用可能です。

リストから指定された値のデータを削除する

remove メソッドで、インデックスではなく値を指定して削除できる。

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
l.remove('pen')
print(l)
l.remove('pen')
l.remove('pen')
print(l)

結果:

['gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
['gum', 'scale', 'triangle', 'marker']

remove メソッド1回ごとに1つ、指定した値 pen がリストから削除される。

リストを整列する

sort メソッドを使う

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
l.sort()
print(l)

結果:

['gum', 'marker', 'pen', 'pen', 'pen', 'scale', 'triangle']

標準では、昇順(数値であれば、数字が大きくなっていく)で整列される。降順にするためには、reverse=Trueを指定する

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
l.sort(reverse=True)
print(l)

結果:

['triangle', 'scale', 'pen', 'pen', 'pen', 'marker', 'gum']

リストを逆順にする

sort しないで逆順にするには reverse メソッドを使う。

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
l.reverse()
print(l)

結果:

['pen', 'pen', 'marker', 'triangle', 'scale', 'gum', 'pen']

リストを文字列に結合、文字列をリストに分割

リストを文字列に結合

リストのメソッドではなく、文字列のメソッド join を使用する。

l = ['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
s = ','.join(l)
print(s)

結果:

pen,gum,scale,triangle,marker,pen,pen

区切り文字の文字列型.join(結合されるリスト型) の形式で使用する。管理的な csv や tsv の作成も可能。

文字列をリストに分割

リストのメソッドではなく、文字列の split メソッドを使う

s = 'pen,gum,scale,triangle,marker,pen,pen'
l = s.split(',')
print(l)

結果:

['pen', 'gum', 'scale', 'triangle', 'marker', 'pen', 'pen']
FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

最新の記事