・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2024年03月21日に投稿されました。)
PythonでList(リスト)同士の結合を行うにはextend()使用します。
extend()とは、List(リスト)とイテレータを結合する関数になります。
そのため、List(リスト)とList(リスト)、List(リスト)とイテレータの結合を行うことができます。
また、extend()は1次元List(リスト)だけでなく、2次元や3次元の多次元List(リスト)に使用することも可能です。
List(リスト)に要素を追加する方法はいくつかありますが、こちらの関数を使用することでリスト内の要素を一気に追加することができるため、とても便利です。
そのためもし、List(リスト)同士の結合を行いたいと思った場合はextend()を使用するようにしましょう。
今回はPythonのextend()でList(リスト)同士の結合を行う方法について紹介していきます。
List(リスト)同士を結合させたい場合
List(リスト)と他のイテレータとを結合させたい場合
extend()とは
extend()とはList(リスト)とイテレータの結合を行う関数になります。
そのため、List(リスト)に対して使用すると、リスト同士を結合することができます。
例えば、リストAとリストBを結合するとなると、リストBに格納されている要素をリストAに格納する形になります。
extend()の書き方
1 | 対象のList(リスト).extend(結合するリスト) |
対象のList(リスト)の後ろにextend()と追記し、必須パラメータを1つ指定することで使用することができます。
extend()のパラメータ
extend()のパラメータは下記のようになります。
- 結合するリスト: (必須)
対象のリストと結合するリストを指定する
extend()は、必須パラメータとして「結合するリスト」を指定します。
そのため、extend()で指定できるパラメータの個数は1つとなります。
extend()の返り値
extend()の返り値はありません。
extend()でList(リスト)同士の結合を行うサンプルコード
extend()でList(リスト)同士の結合を行うサンプルコードをご紹介します。
ここでは下記の2パターンでextend()を使用します。
- 結合するリストに要素が存在する場合
- 結合するリストに要素が存在しない場合
結合するList(リスト)に要素が存在する場合
結合するList(リスト)に要素が存在する場合にextend()を使用すると、List(リスト)と他のリストとの結合を行います。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● 結合するリスト") list2 = ['Ruby', 'C', 'Swift'] print(list2) print("● extend()使用後") list1.extend(list2) print(list1) |
実行結果
extend()でList(リスト)同士の結合を行っています。
そのため、list2の要素がlist1内に格納されています。
結合するリストに要素が存在しない場合
結合するリストに要素が存在しない場合にextend()を使用すると、リストがそのまま表示されます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print('● extend()使用後') list1.extend([]) print(list1) |
実行結果
extend()でList(リスト)同士の結合を行っています。
今回は、リストの結合は行われますが、結合するリストが空であるため「list1」のリストがそのまま表示されています。
extend()で多次元List(リスト)のリスト結合を行うサンプルコード
extend()は1次元リストだけでなく、多次元List(リスト)を結合することができます。
多次元List(リスト)の場合はリストの中にリストが存在するため、繰り返し処理で深い階層にアクセスして処理を行う必要があります。
そのため、ここではextend()で多次元List(リスト)のリスト結合を行うサンプルコードをご紹介します。
2次元List(リスト)の場合
2次元List(リスト)に対してextend()を使用します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | print('● 対象の2次元リスト') list1 = [ ['JavaScript', 'C#'], ['Python', 'Swift'], ['Kotlin', 'Go'] ] print(list1) print('● extend()使用後(1次元リスト)') for list1_n in list1: list1_n.extend(['Java', 'Kotlin']) print(list1) print('● extend()使用後(2次元リスト)') list1.extend([['R'], ['SQL', 'Go']]) print(list1) |
実行結果
extend()で2次元List(リスト)のリスト結合を行っています。
そのため、下記のようにリストが表示されています。
- list1の各1次元リストの末尾に「Java」と「Kotlin」の要素が格納。
- list1の末尾に「[‘R’], [‘SQL’, ‘Go’]」の要素が格納。
3次元List(リスト)の場合
3次元List(リスト)に対してextend()を使用します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | print('● 対象の3次元リスト') list1 = [ [['JavaScript', 'C#'],['Python', 'Swift']], [['Ruby'], ['Java', 'C']] ] print(list1) print('● extend()使用後(1次元リスト)') for list1_n in list1: for list1_nm in list1_n: list1_nm.extend(['C++', 'Shell']) print(list1) print('● extend()使用後(2次元リスト)') for list1_n in list1: list1_n.extend([['PHP'], ['Go']]) print(list1) print('● extend()使用後(3次元リスト)') list1.extend([[['SQL']]]) print(list1) |
実行結果
extend()で3次元List(リスト)のリスト結合を行っています。
そのため、下記のようにリストが表示されています。
- list1の各1次元リストの末尾に「C++」と「Shell」の要素が格納。
- list1の各2次元リストの末尾に「[‘PHP’], [‘Go’]」の要素が格納。
- list1の3次元リストの末尾に「[[‘SQL’]]」の要素が格納。
extend()で複数のList(リスト)同士の結合を行う場合
extend()で複数のList(リスト)同士の結合を行うには繰り返し処理を使用します。
結合したい複数のリストを1つのリストに格納し、繰り返し処理を使用することで複数のリスト同士の結合を行うことが可能になります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print('● 結合するリスト') list2 = ['Swift', 'C'] print(list2) list3 = ['Kotlin', 'SQL'] print(list3) print('● extend()使用後') listN = [list2, list3] for list_ex in listN: list1.extend(list_ex) print(list1) |
実行結果
extend()で複数のList(リスト)同士の結合を行っています。
そのため、「list2」と「list3」に格納されている要素が「list1」の要素に格納して表示されています。
extend()を使用した実際のケース
extend()を使用した実際のケースについてご紹介します。
例えば、extend()使用して選択した趣味とカンマで区切った趣味の一覧を表示するようなコードを作成します。
● index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!DOCTYPE html> <html lang="ja"> <head> <title>extend()でList(リスト)同士の結合を行う</title> <meta charset="utf-8"/> </head> <body> <form action="/result" method="POST"> <h2>登録する趣味を選択</h2> <p>*その他の場合はカンマで区切って記入</p> <div> <input type=checkbox name='item' value = 'スポーツ'>スポーツ <input type=checkbox name='item' value = 'アニメ/漫画'>アニメ・漫画 <input type=checkbox name='item' value = '読書'>読書 <input type=checkbox name='item' value = 'ドラマ'>ドラマ <input type=checkbox name='item' value = 'ショッピング'>ショッピング <input type=checkbox name='item' value = '映画'>映画 <input type=checkbox name='item' value = 'その他'>その他 <input type=text name='item-other'> </div> <button type="submit">登録</button> </form> </body> </html> |
● result.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!DOCTYPE html> <html lang="ja"> <head> <title>extend()でList(リスト)同士の結合を行う</title> <meta charset="utf-8"/> </head> <body> <h2>あなたの趣味</h2> <div> <ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul> </div> </body> </html> |
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from flask import Flask, render_template, request app = Flask(__name__) reg_list = '' other_list = '' other_str = '' @app.route('/') def index(): return render_template('index.html') @app.route('/result', methods=['POST']) def result(): try: reg_list = request.form.getlist('item') if 'その他' in reg_list : other_str = request.form.get('item-other') str.strip(other_str) if ',' in other_str: other_list = other_str.split(',') reg_list.extend(other_list) reg_list.remove('その他') else: reg_list.extend(other_str) except Exception as e: print(e) finally: return render_template('result.html', items = reg_list) if __name__ == '__main__': app.run() |
実行結果
extend()で「その他」の項目が含まれた趣味の一覧を表示しています。
今回は下記のような内容で処理を行っています。
- requestで選択した趣味を取得。
- 選択した趣味に「その他」がある場合は3〜5の処理を行い、それ以外は6の処理を行う。
- 受け取ったその他欄の値をstrip()で空白を削除。
- その他欄の値をsplit()を使用して「,(カンマ)」で区切ってリストにする
- extend()で選択した趣味とカンマで区切ったリストを結合して画面に渡す。
- 選択した趣味をそのまま画面に渡す。
そのため、選択した趣味と「その他」でカンマを区切った内容が登録した趣味の一覧として登録されています。
extend()でList(リスト)とリスト以外のイテレータの結合を行う場合
extend()はリスト以外にも他のイテレータとの結合を行うことができます。
そのため、ここではextend()でList(リスト)とリスト以外のイテレータを結合します。
タプル(tuple)と結合する場合
extend()でタプル(tuple)と結合すると、リストの要素にタプルの要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print('● extend()使用後') tuple1 = ('C', 'C++', 'Kotlin') list1.extend(tuple1) print(list1) |
実行結果
extend()でList(リスト)とタプル(tuple)の結合を行っています。
そのため、タプル(tuple)の要素がリストに格納されています。
辞書(dict)と結合する場合
extend()で辞書(dict)と結合すると、リストの要素に辞書のキーが追加されるようになります。
そのため、item()やkeys()、values()で辞書から取り出したイテレータに対して使用することでリストの要素と結合することが可能にります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | print('● 対象のリスト-1') list1 = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1) print('● extend()使用後-1') dict1 = {'C': 'C言語', 'Swift': 'スイフト', 'Kotlin': 'コトリン'} list1.extend(dict1.items()) print(list1) print('● 対象のリスト-2') list2 = ['JavaScript', 'PHP', 'Python', 'Java'] print(list2) print('● extend()使用後-2') dict2 = {'C': 'C言語', 'Swift': 'スイフト', 'Kotlin': 'コトリン'} list2.extend(dict2.keys()) print(list2) print('● 対象のリスト-3') list3 = ['JavaScript', 'PHP', 'Python', 'Java'] print(list3) print('● extend()使用後-3') dict3 = {'C': 'C言語', 'Swift': 'スイフト', 'Kotlin': 'コトリン'} list3.extend(dict3.values()) print(list3) |
実行結果
extend()でList(リスト)と辞書(dict)の結合を行っています。
そのため、辞書(dict)の要素がリストに格納されています。
また、items()を使用することでキーと値のペア、keysを使用することで()キーのみ、values()を使用することで値のみを要素として格納することができます。
set型と結合する場合
extend()でset型と結合すると、リストの要素にset型の要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | print('● 対象のリスト-1') list1_Ex = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ex) print('● extend()使用後') list2_Ex= ['Kotlin', 'C#'] list1_Ex.extend(list2_Ex) print(list1_Ex) print('● 対象のリスト-2') list1_Ap = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ap) print('● append()使用後') list2_Ap= ['Kotlin', 'C#'] list1_Ap.append(list2_Ap) print(list1_Ap) |
実行結果
extend()でList(リスト)とset型の結合を行っています。
そのため、set型の要素がリストに格納されています。
frozenset型と結合する場合
extend()でfrozenset型と結合すると、リストの要素にset型の要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1) print('● extend()使用後') fset1 = frozenset({'Kotlin', 'C#'}) list1.extend(fset1) print(list1) |
実行結果
extend()でList(リスト)とfrozenset型の結合を行っています。
そのため、frozenset型の要素がリストに格納されています。
extend()でList(リスト)と文字列を結合する場合
extend()でList(リスト)と文字列を結合すると、文字列の1文字ずつがList(リスト)の要素として追加されます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1) print('● extend()使用後') list1.extend('Swift') print(list1) |
実行結果
extend()でList(リスト)と文字列の結合を行っています。
そのため、「S」、「w」、「i」、「f」、「t」がリストの要素として格納されています。
extend()とappend()の違い
Pythonにはリストに要素を追加する関数であるappend()が存在しますが、extend()とappend()には違いがあるため注意してください。
そのため、ここではextend()とappend()の違いについてご紹介します。
もし、append()とは何かと思った場合は下記の記事をご参考ください。
イテレータを要素として追加すると要素が異なる
1つ目はイテレータを要素として追加すると要素が異なるということです。
extend()の場合はイテレータを結合するため、格納されている要素をList(リスト)にそれぞれ追加します。
それに比べて、append()の場合はイテレータを1つの要素としてList(リスト)に追加するようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | print('● 対象のリスト-1') list1_Ex = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ex) print('● extend()使用後') list2_Ex= ['Kotlin', 'Swift'] list1_Ex.extend(list2_Ex) print(list1_Ex) print('● 対象のリスト-2') list1_Ap = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ap) print('● append()使用後') list2_Ap= ['Kotlin', 'Swift'] list1_Ap.append(list2_Ap) print(list1_Ap) |
実行結果
extend()の場合はイテレータを結合するため、格納されている要素をList(リスト)にそれぞれ追加します。
そのため、それぞれの関数を使用したリストの結果は下記のようになります。
- extend()を使用した場合、イテレータの要素がそれぞれ要素としてリストに格納される。
- append()を使用した場合、イテレータの要素が1つの要素としてリストに格納される。
文字列を要素として追加すると要素が異なる
そして2つ目は文字列を要素として追加すると要素が異なるということです。
append()は指定したデータを一つの要素としてList(リスト)に追加します。
それに比べて、extend()は指定したデータの1文字ずつを要素としてList(リスト)に追加します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | print('● 対象のリスト-1') list1_Ex = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ex) print('● extend()使用後') list2_Ex= 'Kotlin' list1_Ex.extend(list2_Ex) print(list1_Ex) print('● 対象のリスト-2') list1_Ap = ['JavaScript', 'PHP', 'Python', 'Java'] print(list1_Ap) print('● append()使用後') list2_Ap= 'Kotlin' list1_Ap.append(list2_Ap) print(list1_Ap) |
実行結果
extend()の場合はイテレータを結合するため、格納されている要素をList(リスト)にそれぞれ追加します。
そのため、それぞれの関数を使用したリストの結果は下記のようになります。
- extend()を使用した場合、文字列が1つの要素としてリストに格納される。
- append()を使用した場合、文字列が1文字ずつ要素としてリストに格納される。
まとめ
● extend()とはリストとイテレータの結合を行う関数である。
● extend()を使用する場合は、下記の引数を指定して使用する。
・追加するリスト:(必須)
● 結合するリストに要素が存在する場合にextend()を使用すると、リスト結合を行ったList(リスト)を返す。
● 結合するリストに要素が存在しない場合にextend()を使用すると、そのままのList(リスト)を返す。
● extend()で複数のList(リスト)結合を行うには繰り返し処理と組み合わせて使用する。
● extend()は1次元(List)リストだけでなく、多次元List(リスト)に対しても使用できる。
● extend()はリスト以外にも下記のイテレータと結合することが可能である。
・タプル(tuple)
・辞書(dict)
(キーのみや値のみ、またはキーと値のペアで結合することも可能。)
・set型
・frozenset型
● 文字列に対してextend()を使用すると、1文字ずつList(リスト)の要素として格納する。
● extend()とappend()は下記のような違いがある。
・イテレータを要素として追加する場合に追加される要素が異なる。
・文字列を要素として追加する場合に追加される要素が異なる。