Pythonのリスト(配列)の初期化、要素へのアクセス、要素の追加、要素の削除、要素の検索、要素の並べ替えを行う方法を1ページにまとめて紹介する。
Pythonでは他の言語における配列と同等なデータ構造はリストとして実装されている。ここでは、本連載でこれまでに紹介してきたリスト(配列)の使い方をコード例を主体にまとめる。詳しい解説はコード例に続けて紹介しているリンクを参照してほしい。
# リスト(配列)の初期化:角かっこ「[]」で囲み、要素をカンマ「,」区切りで並べる
empty_list = [] # 空のリスト
print(empty_list) # []
int_list = [0, 1, 2] # 整数リスト(整数配列)
print(int_list) # [0, 1, 2]
mylist = [0, 'abc', 1, 'def'] # リスト(配列)には任意の型の要素を格納できる
print(mylist) # [0, 'abc', 1, 'def']
# リスト(配列)の初期化:list関数を呼び出す
int_list = list() # 空のリスト(配列)
print(int_list) # []
int_list = list((4, 5, 6)) # タプルの要素を基にリスト(配列)が作成される
print(int_list) # [4, 5, 6]
int_list = list(range(5)) # rangeオブジェクトから整数リスト(整数配列)を作成
print(int_list) # [0, 1, 2, 3, 4]
str_list = list('python') # 文字列の各文字を要素とするリストを作成
print(str_list) # ['p', 'y', 't', 'h', 'o', 'n']
# リスト内包表記
int_list = [x for x in range(0, 10, 2)] # rangeオブジェクトからリストを作成
print(int_list) # [0, 2, 4, 6, 8]
int_list = [x for x in range(10) if x % 2 == 1] # if節を用いる例
print(int_list) # [1, 3, 5, 7, 9]
# if else式を使うときにはfor節に続けずに、内包表記の先頭に記述する
str_list = [c.upper() if c.islower() else c.lower() for c in 'AbCdE']
print(str_list) # ['a', 'B', 'c', 'D', 'e']
# リストのリスト(配列の配列)
mylist = [[0, 1, 2], [3, 4, 5]] # 2次元のリスト(配列)の作成
print(mylist) # [[0, 1, 2], [3, 4, 5]]
mul_tbl = [[x * y for x in range(1, 4)] for y in range(1, 5)]
print(mul_tbl) # [[1, 2, 3], [2, 4, 6], [3, 6, 9], [4, 8, 12]]
リストの初期化については「リスト(配列)を初期化するには([]、list関数、リスト内包表記)」を参照のこと。
mylist = list(range(10))
print(mylist) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# インデックスによるアクセス
n = mylist[1] # 正数は先頭からのインデックス。先頭の要素のインデックスが0
print(n) # 1
n = mylist[-2] # 負数は末尾からのインデックス。末尾の要素のインデックスが-1
print(n) # 8
# インデックスを使った要素の削除
del mylist[4]
print(mylist) # [0, 1, 2, 3, 5, 6, 7, 8, 9]
# インデックスを使って要素を変更する
mylist[-1] = 90
print(mylist) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 90]
リストの要素へのアクセスについては「リスト(配列)の要素にインデックスやスライスを使ってアクセスするには」を参照のこと。
# スライスによるアクセス
mylist = list(range(10))
s = mylist[0:5] # 0〜4番目の5要素を取り出す
print(s) # [0, 1, 2, 3, 4]
s = mylist[:] # 全要素を取り出す
print(s) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
s = mylist[5:] # 5番目以降の全要素を取り出す
print(s) # [5, 6, 7, 8, 9]
s = mylist[:5] # 0〜4番目の5要素を取り出す
print(s) # [0, 1, 2, 3, 4]
s = mylist[0:10:2] # 0、2、4、6、8番目の要素を取り出す
print(s) # [0, 2, 4, 6, 8]
s = mylist[::2] # 同上
print(s) # [0, 2, 4, 6, 8]
s = mylist[-4:] # -4番目から末尾までの全要素を取り出す
print(s) # [6, 7, 8, 9]
s = mylist[-1:-9:-1] # リスト末尾から逆順に要素を取り出す
print(s) # [9, 8, 7, 6, 5, 4, 3, 2]
# スライスによる要素の削除
mylist = list(range(10))
del mylist[3:5] # 3番目と4番目の要素を削除
print(mylist) # [0, 1, 2, 5, 6, 7, 8, 9]
del mylist[0::2] # 上の削除結果から、0、2、4、6番目の要素を削除
print(mylist) # [1, 5, 7, 9]
mylist[0:2] = [] # 上の削除結果から先頭の2要素を削除
print(mylist) # [7, 9]
# スライスを使って要素を変更する
mylist = list(range(10))
mylist[1:3] = [10, 20] # スライスの先頭と末尾を指定して要素を変更
print(mylist) # [0, 10, 20, 3, 4, 5, 6, 7, 8, 9]
mylist[1:3] = [1, 1.5, 2] # この場合はスライスと新しい値の要素数が異なってもOK
print(mylist) # [0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, 9]
mylist = list(range(10))
mylist[1::2] = [10, 30, 50, 70, 90] # 先頭/末尾/増分を指定して要素を変更
print(mylist) # [0, 10, 2, 30, 4, 50, 6, 70, 8, 90]
mylist[0::2] = [0.0, 2.0, 4.0] # ValueError:このときには同じ要素数でないとダメ
リストの要素へのアクセスについては「リスト(配列)の要素にインデックスやスライスを使ってアクセスするには」を参照のこと。
mylist = list(range(5))
print(mylist) # [0, 1, 2, 3, 4]
# +演算子によるリストの結合(リストの末尾へのリストの追加)
tmp = mylist + [5, 6] # +演算子では新しいリストが作成される
print(tmp) # [0, 1, 2, 3, 4, 5, 6]
print(mylist) # [0, 1, 2, 3, 4]
mylist = mylist + 5 # TypeError:リストはリスト以外と結合できない
mylist = mylist + (5, 6) # TypeError:リストはリスト以外と結合できない
# +=演算子によるリスト末尾への要素の追加
mylist += [5] # +=演算(累算代入)では元のリストが変更される
print(mylist) # [0, 1, 2, 3, 4, 5]
mylist += 6 # TypeError:リストへ累算代入できるのは反復可能オブジェクトのみ
mylist += (6, 7) # リスト末尾にタプルの個々の要素を追加
print(mylist) # [0, 1, 2, 3, 4, 5, 6, 7]
リストへの要素の追加については「リスト(配列)に要素を追加するには(+演算子/+=演算子/append/extend/insertメソッド)」を参照のこと。
mylist = list(range(5))
mylist.append(5) # リストの末尾に要素を追加
print(mylist) # [0, 1, 2, 3, 4, 5]
mylist.append(6, 7) # TypeError:appendメソッドの引数は1つだけ
mylist.append([6, 7]) # リストの末尾に単一の要素として「リスト」を追加
print(mylist) # [0, 1, 2, 3, 4, 5, [6, 7]]
mylist.extend([8, 9]) # リストの末尾に反復可能オブジェクトの個々の要素を追加
print(mylist) # [0, 1, 2, 3, 4, 5, [6, 7], 8, 9]
mylist.extend(10) # TypeError:extendメソッドには反復可能オブジェクトのみ渡せる
mylist.extend({10: 'foo', 11: 'bar'}) # 反復可能オブジェクトなのでOK
print(mylist) # [0, 1, 2, 3, 4, 5, [6, 7], 8, 9, 10, 11]
mylist.insert(1, 0.5) # 指定したインデックスに要素を挿入
print(mylist) # [0, 0.5, 1, 2, 3, 4, 5, [6, 7], 8, 9, 10, 11]
リストへの要素の追加については「リスト(配列)に要素を追加するには(+演算子/+=演算子/append/extend/insertメソッド)」を参照のこと。
# インデックスを指定してdel文で要素を削除
mylist = list(range(5)) # [0, 1, 2, 3, 4]
del mylist[0]
print(mylist) # [1, 2, 3, 4]
# スライスを指定してdel文で要素を削除
mylist = list(range(5)) # [0, 1, 2, 3, 4]
del mylist[1:4] # 1〜3番目の要素を削除
print(mylist) # [0, 4]
mylist = list(range(5)) # [0, 1, 2, 3, 4]
del mylist[::2] # 0、2、4番目の要素を削除
print(mylist) # [1, 3]
mylist = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del mylist[1:7:3] # 1番目と4番目の要素を削除
print(mylist) # [0, 2, 3, 5, 6, 7, 8, 9]
# スライスで指定した範囲に空のリストを代入することで削除
mylist = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
mylist[4:8] = [] # 4〜7番目の要素を削除
print(mylist) # [0, 1, 2, 3, 8, 9]
print('mylist[:]:', mylist[:]) # mylist[:]: [0, 1, 2, 3, 8, 9]
mylist[:] = [] # リストの全要素を削除
print(mylist) # []
mylist = list(range(5))
del mylist[:] # このようにも書ける
リストからの要素の削除については「リスト(配列)から要素を削除するには(del文、remove/clear/popメソッド、リスト内包表記)」を参照のこと。
# clearメソッドでリストの全要素を削除
mylist = list(range(10)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(mylist) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
mylist.clear()
print(mylist) # []
# popメソッドで指定したインデックスにある要素をリストから削除して、その値を取得
mylist = list(range(10))
value = mylist.pop() # インデックスを指定しない場合は末尾の要素が削除される
print('popped value:', value) # popped value: 9
print('mylist:', mylist) # mylist: [0, 1, 2, 3, 4, 5, 6, 7, 8]
value = mylist.pop(5) # 5番目の要素を削除
print('popped value:', value) # popped value: 5
print('mylist:', mylist) # mylist: [0, 1, 2, 3, 4, 6, 7, 8]
# removeメソッドで削除したい値を指定して、リストからその値を削除
mylist = [2, 0, 6, 0, 5, 7, 2, 1, 5, 5]
mylist.remove(0) # リスト内の要素0のうち先頭にあるものを削除
print(mylist) # [2, 6, 0, 5, 7, 2, 1, 5, 5]
mylist.remove(0) # リスト内の要素0のうち先頭にあるものを削除
print(mylist) # [2, 6, 5, 7, 2, 1, 5, 5]
mylist.remove(0) # ValueError:指定した値がリスト中にないと例外となる
# リストから特定の条件に合致するものをまとめて削除
mylist = [2, 0, 6, 0, 5, 7, 2, 1, 5, 5]
target = 0 # 要素0をmylistから取り除きたい
mylist = [item for item in mylist if item != target] # 取り除く=それ以外を残す
print(mylist) # [2, 6, 5, 7, 2, 1, 5, 5]
リストからの要素の削除については「リスト(配列)から要素を削除するには(del文、remove/clear/popメソッド、リスト内包表記)」を参照のこと。
mylist = [2, 5, 11, 15, 1, 3, 18, 3, 19, 8] # 10個の整数値を要素とするリスト
# 指定した値がリストに含まれているか含まれていないかを調べる
result = 0 in mylist # 整数値0がmylistに含まれているかを調べる
print(result) # False
result = 0 not in mylist # 整数値0がmylistに含まれていないかを調べる
print(result) # True
# 指定した値がリストに何個含まれているかを調べる
cnt = mylist.count(3) # 整数値3がmylistに何個含まれているかを調べる
print(cnt) # 2
# 指定した値がどのインデックスにあるかを検索
idx = mylist.index(3) # mylistに含まれる整数値3の最小のインデックスを求める
print(idx) # 5
idx = mylist.index(3, 6, len(mylist)) # 検索範囲を指定
print(idx) # 7
idx = mylist.index(100) # ValueError:存在しない値を指定
# リストの要素で最大/最小のものを求める
max_value = max(mylist) # 最大値を求める
print(max_value) # 19
min_value = min(mylist) # 最小値を求める
print(min_value) # 1
max_value = max([]) # ValueError:max関数/min関数に空のリストを渡すと例外
max_value = max([], default='none') # defalut引数は空リストを渡したときの戻り値
print(max_value) # none
max_value = max([0, 1], [4, 5], [2, 3]) # 複数のリストの中で最大のリストを取得
print(max_value) # [4, 5]
mylist = ['pYthon', 'pyThon', 'Python', 'PYTHON']
max_value = max(mylist, key=str.lower) # key引数を指定する例
print(max_value) # pYthon
リストからの要素の検索については「リスト(配列)から要素を検索するには(in/not in演算子、count/indexメソッド、min/max関数)」を参照のこと。
# リストの要素をソートする(インプレース)
mylist = [18, 0, 16, 6, 15, 7, 9, 1, 2, 5]
mylist.sort()
print(mylist) # [0, 1, 2, 5, 6, 7, 9, 15, 16, 18]
# リストの要素をソートした新しいリストを作成する
mylist = [18, 0, 16, 6, 15, 7, 9, 1, 2, 5]
newlist = sorted(mylist)
print('mylist:', mylist) # mylist: [18, 0, 16, 6, 15, 7, 9, 1, 2, 5]
print('newlist:', newlist) # newlist: [0, 1, 2, 5, 6, 7, 9, 15, 16, 18]
# リストの要素をソートする(インプレース/逆順)
mylist = [18, 0, 16, 6, 15, 7, 9, 1, 2, 5]
mylist.sort(reverse=True)
print(mylist) # [18, 16, 15, 9, 7, 6, 5, 2, 1, 0]
# ソートに使用するキーを決定する関数を指定
mylist = [-1.7, 0.1, 4.5, -1.5, -4.6]
mylist.sort(key=abs) # 絶対値順でソート
print(mylist) # [0.1, -1.5, -1.7, 4.5, -4.6]
# ラムダ式を使って、リストのリストをソートする
mylist = [[0, 1, 2], [1, 2, 0], [2, 0, 1]]
mylist.sort(key=lambda x: x[1]) # 1番目の要素をキーとしてリストをソート
print(mylist) # [[2, 0, 1], [0, 1, 2], [1, 2, 0]]
# keyキーワード引数とreverseキーワード引数を使用
mylist = [-1.7, 0.1, 4.5, -1.5, -4.6]
mylist.sort(key=abs, reverse=True) # 絶対値を基に降順でソート
print(mylist) # [-4.6, 4.5, -1.7, -1.5, 0.1]
# 要素を逆順に並べ替える(インプレース)
mylist = list(range(5)) # [0, 1, 2, 3, 4]
mylist.reverse()
print(mylist) # [4, 3, 2, 1, 0]
# 要素を逆順に並べ替えた新しいイテレータを作成する
mylist = list(range(5)) # [0, 1, 2, 3, 4]
iterator = reversed(mylist) # reversed関数の戻り値はイテレータ
print(iterator) # <list_reverseiterator object at ...>
newlist = list(iterator) # イテレータからリストを作成
print('mylist:', mylist) # mylist: [0, 1, 2, 3, 4]
print('newlist:', newlist) # newlist: [4, 3, 2, 1, 0]
リストの要素の並べ替えについては「リスト(配列)をソートしたり、逆順にしたりするには(sort/reverseメソッド、sorted/reversed関数)」を参照のこと。
Copyright© Digital Advantage Corp. All Rights Reserved.