【Pythonリスト】要素の追加・結合・挿入
リスト要素の追加・結合・挿入方法とサンプル(目次)
append()
による末尾への要素の追加
append()
メソッドは、単一の引数のみ受け取る。
# リストを初期化
my_list = [0, 1, 2]
# リストの末尾に整数を追加
my_list.append(3)
print(my_list)
# [0, 1, 2, 3]
# リストの末尾に文字を追加
my_list.append('4')
print(my_list)
# [0, 1, 2, 3, '4']
# リストの末尾にリスト [20, 30] を追加
my_list.append([5, 6])
print(my_list)
# [0, 1, 2, 3, '4', [5, 6]]
# リストとしてそのまま追加される
# リストの末尾に文字列を追加
my_list.append('abc')
print(my_list)
# [0, 1, 2, 3, '4', [5, 6], 'abc']
# 文字列がそのまま追加される
# +=演算子、extend()では文字毎に分解され追加される
# [0, 1, 2, 3, '4', [5, 6], 'a', 'b', 'c']
append()
メソッドの特徴
append()
メソッドでは、引数に「リスト要素」を渡した場合、リスト自体が1要素としてそのまま追加される。(2次元リストの状態になる)- リスト内の要素それぞれを追加したい場合は、
+演算子
または+=演算子
を使用する。(次項参照) - 引数に文字列を渡した場合は、文字列そのものが追加される。
+演算子
やextend()
では、文字毎に分解されて追加される。
+演算子
または +=演算子
による末尾への要素の追加
+
と +=
の違い
+演算子
は追加されたリスト要素が新たに作成される。+=演算子
は元のリストに要素それぞれが追加される。
+演算子
で追加
# リストを初期化
my_list = list(range(3))
print(my_list)
# [0, 1, 2]
# +演算子でリスト要素を末尾に追加
new_list = my_list + [3, 4]
print(new_list)
# [0, 1, 2, 3, 4]
# 新しい拡張されたリスト要素が作成される
print(my_list)
# [0, 1, 2]
# 元のリストはそのまま
# +演算子でリスト要素に整数を追加してみる
new_list = my_list + 3
# TypeError: can only concatenate list (not "int") to list
# +演算子でリスト要素に文字列を追加してみる
new_list = my_list + '3'
# TypeError: can only concatenate list (not "str") to list
# +演算子でリスト要素にタプルを追加してみる
new_list = my_list + (3, 4)
# TypeError: can only concatenate list (not "tuple") to list
# +演算子はリスト要素同士のみで使用できる
+=演算子
で追加
# リストを初期化
my_list = [0, 1, 2]
# +=演算子でリスト要素を末尾に追加
my_list += [3, 4]
print(my_list)
# [0, 1, 2, 3, 4]
# 元のリストにリスト内要素がそれぞれ追加される
# +=演算子でリスト要素に整数を追加してみる
my_list += 5
# TypeError: can only concatenate list (not "int") to list
# +=演算子でリスト要素に文字を追加してみる
my_list += '5'
print(my_list)
# [0, 1, 2, 3, 4, '5']
# +=演算子でリスト要素にタプルを追加してみる
my_list += (6, '7')
print(my_list)
# [0, 1, 2, 3, 4, '5', 6, '7']
# +=演算子でリスト要素に辞書型を追加してみる
my_list += {8:'apple', '9':'banana'}
print(my_list)
# [0, 1, 2, 3, 4, '5', 6, '7', 8, '9']
# 辞書を追加する場合は、辞書型のキーの値が追加される
# +=演算子でリスト要素に文字列を追加してみる
my_list += 'abc'
print(my_list)
# [0, 1, 2, 3, 4, '5', 6, '7', 8, '9', 'a', 'b', 'c']
# 文字列を追加する場合は、1文字づつ追加される
+=演算子
の特徴
+=演算子
では、末尾に整数などは追加できない。ただし、「反復可能オブジェクト」であれば追加できる。(+演算子
では不可)- 注意すべきは文字列を追加する場合は1文字づつ追加されること。そうしなくない場合は
append()
メソッドを使用する。(前項参照)
insert()
による先頭または途中への要素の挿入
insert()
メソッドは、第1引数はインデックス、第2引数は挿入される値を受け取る。
- インデックスに
0
を指定すると先頭(最初)に挿入される - インデックスに
-1
を指定すると末尾(最後)の1つ前に挿入される
# リストを初期化
my_list = ['apple', 'banana', 'cherry']
# インデックスに 1 を指定し 10 を挿入
my_list.insert(1, 10)
print(my_list)
# ['apple', 10, 'banana', 'cherry']
# 先頭要素の次に挿入される
# インデックスに 0 を指定し 20 を挿入
my_list.insert(0, 20)
print(my_list)
# [20, 'apple', 10, 'banana', 'cherry']
# 先頭に挿入される
# インデックスに -1 を指定し 30 を挿入
my_list.insert(-1, 30)
print(my_list)
# [20, 'apple', 10, 'banana', 30, 'cherry']
# 末尾の1つ前に挿入される
# インデックスに 0 を指定し、リスト[1, 2] を挿入
my_list.insert(0, [1, 2])
print(my_list)
# [[1, 2], 20, 'apple', 10, 'banana', 30, 'cherry']
# 先頭にリスト要素が単一要素として挿入(2次元リスト化)される
# 先頭に挿入したリストの中のインデックス 1 にタプル('a', 'b')を挿入
my_list[0].insert(1, ('a', 'b'))
print(my_list)
# [[1, ('a', 'b'), 2], 20, 'apple', 10, 'banana', 30, 'cherry']
insert()
の特徴
append()
メソッドと同様に、リストは結合されず、単一の要素として挿入される。- リスト内の要素それぞれを追加したい場合は、
+演算子
または+=演算子
を使用する(次項参照)
extend()
によるリスト要素の結合
# リストを初期化
my_list = [0, 1, 2]
# リストとリストを結合
my_list.extend([3, 4])
print(my_list)
# [0, 1, 2, 3, 4]
# 引数で渡されたリストが末尾に結合される
# リストとタプルを結合
my_list.extend((5, '6'))
print(my_list)
# [0, 1, 2, 3, 4, 5, '6']
# 引数で渡されたタプルが末尾に結合される
# リストと辞書を結合
my_list.extend({7:'apple', '8':'banana'})
print(my_list)
# [0, 1, 2, 3, 4, 5, '6', 7, '8']
# 辞書を結合する場合は、キーの値が結合される
# 引数に整数を渡してみる
my_list.extend(9)
# TypeError: 'int' object is not iterable
# 引数に文字を渡してみる
my_list.extend('9')
print(my_list)
# [0, 1, 2, 3, 4, 5, '6', 7, '8', '9']
# 引数に文字列を渡してみる
my_list.extend('abc')
print(my_list)
# [0, 1, 2, 3, 4, 5, '6', 7, '8', '9', 'a', 'b', 'c']
# 文字列を結合する場合は、1文字づつ追加される
extend()
メソッドの特徴
extend()
メソッドは、前述の+=演算子
と同等の動きをする。- 末尾に整数などは結合できない。ただし「反復可能オブジェクト」であれば結合できる。
- 文字列を結合する場合は1文字づつ結合されるので注意する。そうしなくない場合は
append()
メソッドを使用する。(前項参照)
スライス表記による先頭または途中への要素の挿入と結合
スライス表記とは、文字列、リスト、またはタプルの一部をインデックスによって抽出する仕組みのこと。
例えば、['a', 'b', 'c', 'd', 'e', 'f', 'g']
のような文字列があれば、インデックスとは、文字と文字の間のことを指す。
+---+---+---+---+---+---+---+
|'a'|'b'|'c'|'d'|'e'|'f'|'g'|
+---+---+---+---+---+---+---+
0 1 2 3 4 5 6 7 # 0から始まる正の整数で先頭から
-7 -6 -5 -4 -3 -2 -1 # -1から始まる負の整数で末尾の1つ前から
my_list
というリストのインデックスを下記のように指定することで、特定の範囲の要素にアクセスできる。このような表記のことをスライス表記という。
my_list[
start:
stop]
- 「start」は開始のインデックスを指定
- 「stop」は終了のインデックスを指定
スライス表記についての詳細は【Pythonスライス】リスト・文字列の操作 を参照。
# リストを初期化
my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# インデックス開始に 1 、終了に 1 の位置にリスト[10, 20]を挿入し結合
my_list[1:1] = [10, 20]
print(my_list)
# ['a', 10, 20, 'b', 'c', 'd', 'e', 'f', 'g']
# 先頭要素の次に挿入され、かつリストが結合される
# 開始に 0 、終了に 0 の位置に整数 20 を挿入し結合してみる
my_list[0:0] = 20
# TypeError: can only assign an iterable
# 整数単体の挿入結合はできない
# 開始に 0 、終了に 0 の位置にタプル (30, 40) を挿入し結合してみる
my_list[0:0] = (30, 40)
print(my_list)
# [30, 40, 'a', 10, 20, 'b', 'c', 'd', 'e', 'f', 'g']
# 先頭に挿入され、結合される
# 開始に 0 、終了に 1 の位置にリスト [50, 60] を挿入し結合してみる
# また、スライス表記では 0 は省略できる
my_list[:1] = [50, 60]
print(my_list)
# [50, 60, 40, 'a', 10, 20, 'b', 'c', 'd', 'e', 'f', 'g']
# 先頭要素1つが2つの要素に置き換わり、結合される。
- スライス表記は、
+=演算子
と同様に、リストが結合される。