Python

【Python】リスト同士を結合する色々な方法

MAX

リスト同士の結合にはいくつか方法があり、新たなリストを返す方法や自信を更新する方法もある。

また、破壊的な方法はリスト同士だけでなく、リストとイテラブルであれば結合できる。

スポンサーリンク

リスト同士を結合して新しいリストを作成する

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

直感的に分かりやすい方法。リスト同士なら+で結合可能。

1list_a = [1, 2, 3]
2list_b = [10, 20, 30]
3# list同士は+で結合可能
4list_c = list_a + list_b
5print(list_c)
6# [1, 2, 3, 10, 20, 30]

リスト同士以外は結合不可

+演算子ではリスト同士以外は結合できない。

1# リスト同士でないと+演算子での結合はできない
2a = 10
3list_a + a
4# TypeError: can only concatenate list (not "int") to list
5
6tuple_a = (10, 20, 30)
7list_a + tuple_a
8# TypeError: can only concatenate list (not "tuple") to list
9
10set_a = set([10, 20, 30])
11list_a + set_a
12# TypeError: can only concatenate list (not "set") to list

リストじゃないと結合できないとのエラーが出力される。

なお、後述する自身を更新するタイプの結合の場合、タプルや集合なども結合可能となっている。

この処理は+演算子の処理なので、同じ型同士でないと計算できないのかもしれない。

同じリストの複数回繰り返し

「*」演算子でリストを複数回繰り返すことができる。

1list_a = [1, 2, 3]
2# list * nでlistをn回繰り返すことが可能
3list_b = list_a * 3
4print(list_b)
5list_c = 3 * list_a
6print(list_c)
7# [1, 2, 3, 1, 2, 3, 1, 2, 3]
8# [1, 2, 3, 1, 2, 3, 1, 2, 3]

自身を更新してリストを拡張する方法

自身を更新するので、結合というよりは、拡張の方が合っている。extendを使うし。

+=でのリスト拡張

1# +=で自身を更新して結合
2list_a = [1, 2, 3]
3list_b = [4, 5, 6]
4list_a += list_b
5print(list_a)
6# [1, 2, 3, 4, 5, 6]

extendでのリスト拡張

1# extendでリストを拡張
2list_a = [1, 2, 3]
3list_b = [4, 5, 6]
4list_a.extend(list_b)
5print(list_a)

リスト以外でも拡張可能

タプルや集合も結合して拡張可能。

1# list同士以外も結合可能
2# タプルを結合して拡張
3list_a = [1, 2, 3]
4tuple_a = (4, 5, 6)
5list_a += tuple_a
6print(list_a)
7# [1, 2, 3, 4, 5, 6]
8
9# 集合を結合して拡張
10list_a = [1, 2, 3]
11set_a = set([10, 20, 30])
12list_a.extend(set_a)
13print(list_a)
14# [1, 2, 3, 10, 20, 30]

(参考)appendの動作

appendとextendはどちらも自身を更新する処理だが、extendはイテラブルを展開するのに対し、appendは引数の値を1個の要素として扱う。

1# 参考appendの動作
2list_a = [1, 2, 3]
3list_b = [4, 5, 6]
4list_a.append(list_b)
5print(list_a)
6# [1, 2, 3, [4, 5, 6]]

リストにリストをappendすると入れ子になったリストが出来上がる。

同じリストを複数回繰り返して拡張

1list_a = [1, 2, 3]
2list_a *= 3
3print(list_a)
4# [1, 2, 3, 1, 2, 3, 1, 2, 3]

テストデータで同じ内容を何回も繰り返したい時に使ったり。

まとめ

1# リストの結合
2list_a = [1, 2, 3]
3list_b = [10, 20, 30]
4list_c = list_a + list_b
5print(list_c)
6# [1, 2, 3, 10, 20, 30]
7
8# listの複数回繰り返し
9list_a = [1, 2, 3]
10list_b = list_a * 3
11print(list_b)
12# [1, 2, 3, 1, 2, 3, 1, 2, 3]
13
14# リストの拡張
15# +=で自身を更新して結合
16list_a = [1, 2, 3]
17list_b = [4, 5, 6]
18list_a += list_b
19# または
20list_a.extend(list_b)
21print(list_a)
22# [1, 2, 3, 4, 5, 6]
23
24# 複数回繰り返して拡張
25list_a *= 3
26print(list_a)
27# [1, 2, 3, 1, 2, 3, 1, 2, 3]

リストの結合や拡張は、その操作が破壊的かどうかがパッと見で分かるため、注意しやすいのがいい。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました