■ はじめに
配列/リスト系のことを学ぶ
目次
【1】リスト / 配列 (List)の定義 【2】要素数を調べる 【3】要素の追加 1)append() 2)extend() 3)append() / extend() の違い 【4】要素の挿入 【5】要素の削除 1)clear() ... リストを空にする 2)remove() ... 値の削除 3)pop() ... インデックスによる削除 4)del ... リスト・オブジェクトの破棄 【6】ループ 1)リストからループ 2)enumerate() 3)zip() 補足:アンパック ※ その他の事項は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2020/11/01/000000
【1】リスト / 配列 (List)の定義
* [ ... ]を使う
サンプル
fruits = ["apple","grape","banana"] print(fruits[0]) # "apple"が表示
【2】要素数を調べる
* len() を使う
サンプル
name_list = ['Tom', 'Sam', 'Mike', 'Sam', 'Kevin', 'Sam', 'Mike', 'Sam',] # len(【リスト】) print(len(name_list)) # 8
【3】要素の追加
1)append()
* append() : 要素の追加
サンプル
list1 = [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}] list2 = [{'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}] list1.append(list2) print('list1*****************') # [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}, # [{'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}]] print(list1) print('list1*****************') list1.append({'id': '0005', 'name': 'Tim'}) # [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}, # [{'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}], # {'id': '0005', 'name': 'Tim'}] print(list1)
2)extend()
* extend() : 要素の追加
サンプル
list1 = [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}] list2 = [{'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}] list1.extend(list2) print('list1*****************') # [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}, # {'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}] print(list1) print('list1*****************') list1.extend({'id': '0005', 'name': 'Tim'}) # [{'id': '0001', 'name': 'Mike'}, {'id': '0002', 'name': 'Sam'}, # {'id': '0003', 'name': 'Ken'}, {'id': '0004', 'name': 'Kevin'}, # 'id', 'name'] <= ★意図しない追加★ print(list1)
3)append() / extend() の違い
* append()にしなければならないところを extend()にしてバグったので、自戒の意味を込めてメモ。
サンプル
# append() の場合 list1 = ['hello', 'world'] list2 = ['Mike', '!!'] list1.append(list2) print(list1) # ['hello', 'world', ['Mike', '!!']] # extend の場合 list1 = ['hello', 'world'] list2 = ['Mike', '!!'] list1.extend(list2) print(list1) # ['hello', 'world', 'Mike', '!!']
【4】要素の挿入
サンプル
# 要素の挿入 : insert(【インデックス】, 【値】) fruits.insert(2, "water melon") # 実験 list = [] list.insert(0, "aa") list.insert(0, "bb") list.insert(0, "cc") for i, value in enumerate(list): print("index = {INDEX}, value={VALUE}".format( INDEX=i, VALUE=value)) # [表示結果] # index = 0, value=cc # index = 1, value=bb # index = 2, value=aa
【5】要素の削除
1)clear() : すべての要素を削除 2)remove() : 指定した値と同じ要素を削除 3)pop() : 指定した位置の要素を削除し、値を取得 4)del : すべての要素を削除
1)clear() ... リストを空にする
サンプル
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] a.clear() print(a) # []
2)remove() ... 値を指定した削除
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] a.remove(2) print(a) # [1, 3, 4, 5, 6, 7, 8, 9] name_list1 = ['Tom', 'Sam', 'Mike', 'Kevin'] name_list1.remove("Sam") print(name_list1) # ['Tom', 'Mike', 'Kevin'] # 複数含まれる場合は、最初の一つだけが削除 name_list2 = ['Tom', 'Sam', 'Mike', 'Sam', 'Kevin', 'Sam', 'Mike', 'Sam',] name_list2.remove("Sam") print(name_list2) # ['Tom', 'Mike', 'Sam', 'Kevin', 'Sam', 'Mike', 'Sam'] # 値がないリストを削除した場合は例外 name_list3 = ['Tom', 'Sam', 'Mike', 'Kevin'] name_list3.remove("dummy") print(name_list3) # ValueError: list.remove(x): x not in list
3)pop() ... インデックスによる削除
* 感覚的に、リストから指定したインデックスの値を取り出す => 取り出した結果、リストから値が削除される形になる
サンプル
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(a.pop(0)) # 0 print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a.pop(7)) # 8 print(a) # [1, 2, 3, 4, 5, 6, 7, 9]
4)del ... リスト・オブジェクトの破棄
サンプル
# 要素の削除 : del ... ★削除する文法のクセが強い★ del fruits[0]
【6】ループ
1)リストからループ 2)enumerate() : index と共にループできる 3)zip() : リストをまとめる
1)リストからループ
list_1 = ['x', 'y', 'z'] for val in list_1: print(val) # x # y # z fruits = ["apple","grape","banana"] for fruit in fruits: print(fruit)
補足:リスト内でのループ(リスト内砲表記)
values = [i for i in range(10)] # リスト内砲表記については、以下の関連記事を参照のこと。
Python ~ 基本編 / リスト・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/11/01/000000
2)enumerate()
サンプル
list = [] list.insert(0, "aa") list.insert(0, "bb") list.insert(0, "cc") for i, value in enumerate(list): print("index = {INDEX}, value={VALUE}".format( INDEX=i, VALUE=value)) # [表示結果] # index = 0, value=cc # index = 1, value=bb # index = 2, value=aa numbers = [1,2,3,4,5] for (i, number) in enumerate(numbers): print(str(i) + " : " + str(number))
3)zip()
サンプル
list_1 = ['x', 'y', 'z'] list_2 = [1, 2, 3] ziped_list = list(zip(list_1, list_2)) print(ziped_list) # 出力結果 (要素が組み合わせれ、タプルで返される) # [('x', 1), ('y', 2), ('z', 3)] for key, value in ziped_list: print('key {}, value = {}'.format(key, value)) # 出力結果 # key x, value = 1 # key y, value = 2 # key z, value = 3 # 引数に(*)をつけると、unzip(zipの逆で分解) unzip1, unzip2 = zip(*ziped_list) print(unzip1) print(unzip2) # 出力結果 # ('x', 'y', 'z') # (1, 2, 3)
補足:アンパック
* リスト、タプル、辞書などのコレクションを展開し、 複数の変数に代入できる
例
list_ex1 = [1, 2, 3] a, b, c = list_ex1 # ★アンパック print(f"{a} / {b} / {c}") # 1 / 2 / 3 # ★これもアンパックの例 for (i, number) in enumerate(numbers):
参考文献
http://www.tohoho-web.com/python/list.html
https://qiita.com/taro-ari/items/9f54536fe3c623813db1
関連記事
Python ~ 基本編 / リスト・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/11/01/000000
Python ~ 基本編 / 辞書 ~
https://dk521123.hatenablog.com/entry/2019/10/27/100014
Python ~ 基本編 / 辞書・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/10/11/000000
Python ~ 基本編 / タプル ~
https://dk521123.hatenablog.com/entry/2019/10/26/000000
Python ~ 基本編 / 集合 Set ~
https://dk521123.hatenablog.com/entry/2021/04/02/000000
Python ~ 基本編 / ラムダ lambda ~
https://dk521123.hatenablog.com/entry/2019/09/23/000000
Python ~ 基本編 / map ~
https://dk521123.hatenablog.com/entry/2021/03/29/000000
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251