[解決!Python]複数のリスト(配列)を結合するには(+/+=演算子、extendメソッド、アンパック演算子)解決!Python

複数のリストを結合するには+演算子や+=演算子、extendメソッドやシーケンスをアンパックする*演算子を使用する方法がある。

» 2023年12月01日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

* 本稿は2022年12月20日に公開された記事をPython 3.12.0で動作確認したものです(確認日:2023年12月1日)。


list1 = [0, 1, 2]
list2 = [3, 4, 5]
list3 = [6, 7, 8]

# 複数のリストを+演算子で結合する
result = list1 + list2
print(result)  # [0, 1, 2, 3, 4, 5]

result = list1 + list2 + list3
print(result)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]

print(id(list1))  # 4444844672など。
list1 = list1 + list2 + list3
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(id(list1))  # 4445022912など。上のid値とは異なる

# 複数のリストを+=演算子で結合する
list1 = [0, 1, 2]
list2 = [3, 4, 5]

list1 += list2
print(list1)  # [0, 1, 2, 3, 4, 5]

list1 = [0, 1, 2]
list2 = [3, 4, 5]

print(id(list1))  # 4445055936など
list1 += list2  # +=演算子は演算子左側のオブジェクトを変更する
print(list1)  # [0, 1, 2, 3, 4, 5]
print(id(list1))  # 4445055936など(list1のidが変わらない)

list1 = [0, 1, 2]
list2 = [3, 4, 5]
list3 = [6, 7, 8]

list1 += list2 + list3  # 累算代入演算子よりも+演算子の方が優先順位が高い
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]

# extendメソッドで2つのリストを結合する
list1 = [0, 1, 2]
list2 = [3, 4, 5]

list1.extend(list2)
print(list1)  # [0, 1, 2, 3, 4, 5]

# *演算子でリストの要素を展開する
list1 = [0, 1, 2]
list2 = [3, 4, 5]

result = [*list1, *list2]
print(result)  # [0, 1, 2, 3, 4, 5]


リストの結合

 複数のリストを結合するには幾つかの方法がある。例えば以下のような方法が考えられる。

  • +演算子を使う方法
  • +=演算子を使う方法
  • リストのextendメソッドを使う方法
  • *演算子(アンパック演算子)を使う方法

 以下ではこれらの方法を見ていく。なお、リストへの値の追加という観点で、+演算子や+=演算子を紹介している「リスト(配列)に要素を追加するには」という記事もあるので、興味のある方はそちらも参照されたい。

+演算子を使って複数のリストを結合する

 +演算子はその左右に置いたリストを結合し、新しいリストを作成する。以下に例を示す。

list1 = [0, 1, 2]
list2 = [3, 4, 5]
list3 = [6, 7, 8]

# 複数のリストを+演算子で結合する
result = list1 + list2
print(result)  # [0, 1, 2, 3, 4, 5]


 この例では2つのリスト[0, 1, 2]と[3, 4, 5]が結合され、[0, 1, 2, 3, 4, 5]というリストが新しく作成され、変数resultに代入されている。

 3つ以上のリストを+演算子でつないで結合することも可能だ。

result = list1 + list2 + list3
print(result)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]


 既に述べている通り、+演算子でリストを結合した場合、リストの要素を結合した新しいリストが作成される。そのため、「list1 = list1 + list2」のようにリストを結合すると、元のlist1と結合後のlist1は実際には別のオブジェクトを参照する。

print(id(list1))  # 4444844672など。
list1 = list1 + list2 + list3
print(list1)  # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(id(list1))  # 4445022912など。上のid値とは異なる


 この例では、もともとの変数list1が参照しているオブジェクトのIDは「4444844672」となっている。だが、「list1 = list1 + list2 + list3」を実行して、作成されたオブジェクトが変数list1に代入されたことで、そのIDは「4445022912」に変化している。

複数のリストを+=演算子で結合する

 +=演算子でもリストを結合できる。「list1 += list2」とすると、list1が参照するリストにlist2が参照するリストの内容が結合される。以下に例を示す。

list1 = [0, 1, 2]
list2 = [3, 4, 5]

list1 += list2
print(list1)  # [0, 1, 2, 3, 4, 5]


 この例では、list1が参照する[0, 1, 2]というリストにlist2が参照する[3, 4, 5]というリストの要素が結合され、list1が参照するリストが[0, 1, 2, 3, 4, 5]に変化している点に注意しよう。このように+=演算子は、+演算子とは異なり元のオブジェクトを変更するので、そのIDは変わらない。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。