・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2024年04月10日に投稿されました。)
Pythonでリスト(List)の指定した位置に要素を追加するにはinsert()使用します。
insert()とは、リストの指定した位置に要素を追加する関数になります。
そのため、insert()で指定した要素がリスト内に何個格納されているかを調べることが可能になります。
そして、insert()は2次元List(リスト)や3次元List(リスト)のような多次元リストの指定した位置に要素を追加することもできます。
Pythonで位置を指定して要素を追加する方法はあまりないため、もしリストの指定した位置に要素を追加したい場合はinsert()を使用しましょう。
今回はPythonのinsert()でリスト(List)の指定した位置に要素を追加する方法について紹介していきます。
List(リスト)の指定した位置に要素を追加したい場合
insert()とは
insert()とはリストの指定した位置に要素を格納する関数になります。
リストは新しい要素が末尾に追加されていきますが、insert()を使用することで好きな箇所に要素を追加することができます。
insert()の書き方
insert()の書き方は下記のようになります。
1 | 対象のリスト.insert('追加する位置','追加する要素) |
対象のリストの後ろにinsert()と追記し、括弧の中に必須のパラメータと任意のパラメータの計2つを指定します。
insert()のパラメータ
insert()のパラメータは下記のようになります。
- 追加する位置: (必須)
追加する位置をインデックスで指定する - 追加する要素: (必須)
リストに追加する要素を指定する
insert()は必須なパラメータとして「追加する要素」と「追加する位置」を指定します。
そのため、合計で2つのパラメータを指定する必要があります。
insert()の返り値
insert()の返り値はありません。
insert()でリスト(List)の指定した位置に要素を追加するサンプルコード
insert()でリスト(List)の指定した位置に要素を追加するサンプルコードをご紹介します。
ここでは下記の2パターンでinsert()を使用します。
- 追加する要素がリテラルである場合
- 追加する要素がイテレータである場合
追加する要素がリテラルである場合
追加する要素がリテラルである場合にinsert()を使用すると、一つの要素としてリストの指定した位置に追加します。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● insert()使用後-1") list1.insert(2, 'Swift') print(list1) print("● insert()使用後-2") list1.insert(0, 'Kotlin') print(list1) |
実行結果
insert()でリストの指定した位置にリテラル要素を追加しています。
「2」を指定したため、3番目に「Swift」が、「0」を指定したため、1番目に「Kotlin」が追加されています。
追加する要素がイテレータである場合
追加する要素がイテレータである場合にinsert()を使用すると、一つのイテレータ要素として指定した位置に追加します。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● insert()使用後") list1.insert(0, ['Kotlin', 'Swift']) print(list1) |
実行結果
insert()でリストの指定した位置にイテレータ要素を追加しています。
「0」を指定したため、1番目に「Kotlin」と「Swift」が格納されたリストが追加されています。
追加する位置を変更してinsert()でリスト(List)の指定した位置に要素を追加する場合
insert()は追加する位置の指定によって要素の追加位置が異なります。
そのため、ここではinsert()の追加する位置を下記の3パターンで変更してリスト(List)の指定した位置に要素を追加します。
- 追加する位置が要素数未満である場合
- 追加する位置が要素数以上である場合
- 追加する位置が負の整数である場合
追加する位置が要素数未満の場合
追加する位置が要素数未満である場合は、指定したインデックスの位置に要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● insert()使用後-1") list1.insert(3, 'Swift') print(list1) print("● insert()使用後-2") list1.insert(5, 'Kotlin') print(list1) |
実行結果
insert()でリストの指定した位置に要素を追加しています。
今回は要素数よりも小さい「3」と「4」を指定したため、4番目に「Swift」が、5番目に「Kotlin」が追加されています。
追加する位置が要素数以上である場合
追加する位置が要素数以上である場合は、リスト(List)の末尾に要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● insert()使用後-1") list1.insert(5, 'Swift') print(list1) print("● insert()使用後-2") list1.insert(10, 'Kotlin') print(list1) |
実行結果
insert()でリスト(List)の指定した位置に要素を追加しています。
今回は要素数以上である「5」と「10」を指定したため、「Swift」と「Kotlin」がリスト(List)の末尾に追加されています。
追加する位置が負の整数である場合
追加する位置が負の整数である場合は、リストの末尾から数えたインデックスの位置に要素が追加されるようになります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● insert()使用後-1") list1.insert(-3, 'Swift') print(list1) print("● insert()使用後-2") list1.insert(-1, 'Kotlin') print(list1) |
実行結果
insert()でリスト(List)の指定した位置に要素を追加しています。
今回は負の整数である「-3」と「-1」を指定したため、「Swift」が3番目に、「Kotlin」が7番目に追加されています。
リスト(List)の指定した複数の位置に要素を追加する場合
insert()でリスト(List)の指定した複数の位置に要素を追加するには繰り返し処理を使用します。
追加したい位置のインデックスをリスト(List)に格納し、繰り返し処理内にinsert()を使用することで、複数の位置に要素を追加することができます。
● main.py
1 2 3 4 5 6 7 8 9 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'GO'] print(list1) insert_idx = [0, 2, 4] print("● insert()使用後-1") for idx in insert_idx: list1.insert(idx, 'Java') print(list1) |
実行結果
insert()でリスト(List)の指定した複数の位置に要素を追加しています。
今回は「0」と「2」と「4」を格納したリストに対して使用したため、1番目と3番目と5番目に「Java」が追加されています。
insert()で多次元のリスト(List)の指定した位置に要素を追加するサンプルコード
insert()で多次元のリスト(List)の指定した位置に要素を追加するサンプルコードについてご紹介します。
多次元リスト(List)に対して使用する場合は、次元が異なるため、アクセスする箇所によっては追加する要素の位置が異なります。
そのためここでは、下記の3ケースで多次元のリスト(List)の指定した位置に要素を追加します。
- 対象リスト(List)の指定した位置に要素を追加する場合
- 各リスト(List)の指定した位置に要素を追加する場合
- リスト(List)全体の指定した位置に要素を追加する場合
対象リスト(List)の指定した位置に要素を追加する場合
insert()でリスト(List)の指定した位置に要素を追加するにはリスト変数の後ろにインデックスを指定します。
2次元リストの場合は1つ、3次元リストの場合は2つ指定します。
● 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 | print('● 対象の2次元リスト') list1 = [ ['JavaScript', 'C#'],['Python', 'Swift'], ['Ruby', 'Kotlin'] ] print(list1) print('● insert()使用後-1-1') list1[1].insert(1,'Java') print(list1) print('● insert()使用後-1-2') list1.insert(2,['Java','C++']) print(list1) print('● 対象の3次元リスト') list2 = [ [['JavaScript', 'C#'],['Python', 'Swift']], [['Ruby', 'Kotlin'],['GO']] ] print(list2) print('● insert()使用後-2-1') list2[1][1].insert(1,'Java') print(list2) print('● insert()使用後-2-2') list2[1].insert(2,['PHP','C++']) print(list2) print('● insert()使用後-2-3') list2.insert(2,[['Ruby','Cobol'],['Rust']]) print(list2) |
実行結果
insert()で対象リスト(List)の指定した位置に要素を追加しています。
そのため、下記のような結果が表示されています。
- 2次元リスト内にある2つ目の1次元リストの2番目に「Java」が追加
- 2次元リスト(List)の2番目に「[‘Java’, ‘C’]」が追加
- 3次元リスト内にある2つ目の2次元リストの2つ目の1次元リストの2番目に「Java」が追加
- 3次元リスト内にある2つ目の2次元リストの3番目に「[‘PHP’,’C++’]」が追加
- 3次元リスト内の3番目に「[[‘Ruby’,’Cobol’],[‘Rust’]]」が追加
各リスト(List)の指定した位置に要素を追加する場合
insert()で各リスト(List)の指定した位置に要素を追加するには繰り返し処理を使用します。
繰り返し処理によって多次元リスト内にアクセスでき、各リストを対象にすることができます。
また、次元によって繰り返し処理を使用する必要があるため注意してください。
● 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 | print('● 対象の2次元リスト') list1 = [ ['JavaScript', 'C#'],['Python', 'Swift'], ['Ruby', 'Kotlin'] ] print(list1) print('● insert()使用後-1') for list1_m in list1: list1_m.insert(1, 'Java') print(list1) print('● 対象の3次元リスト') list2 = [ [['JavaScript', 'C#'],['Python', 'Swift']], [['Ruby', 'Kotlin'],['GO']] ] print(list2) print('● insert()使用後-2-1') for list2_m in list2: for list2_mn in list2_m: list2_mn.insert(0, 'Java') print(list2) print('● insert()使用後-2-2') for list2_m in list2: list2_m.insert(2,['Perl','C++']) print(list2) |
実行結果
insert()で3次元リスト(List)の指定した位置に要素を追加しています。
そのため、下記のような結果が表示されています。
- 2次元リスト(List)内にある各1次元リストの2番目に「Java」が追加
- 3次元リスト(List)内にある各1次元リストの1番目に「Java」が追加
- 3次元リスト(List)内にある各2次元リストの3番目に「[‘Perl’,’C++’]」が追加
リスト(List)全体の指定した位置に要素を追加する場合
insert()でリスト(List)全体の指定した位置に要素を追加するには多次元リストをフラット化します。
フラット化にすることで多次元リストが1次元リストに変換されるため、リスト(List)全体を対象にすることができます。
● 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 | import itertools print('● 対象の2次元リスト') list1 = [ ['JavaScript', 'C#'],['Python', 'Swift'], ['Ruby', 'Kotlin'] ] print(list1) print('● insert()使用後-1') list1_flat = list(itertools.chain.from_iterable(list1)) list1_flat.insert(1,'Java') print(list1_flat) print('● 対象の3次元リスト') list2 = [ [['JavaScript', 'C#'],['Python', 'Swift']], [['Ruby', 'Kotlin'],['GO']] ] print(list2) print('● insert()使用後-2') list2_flat_m = itertools.chain.from_iterable(list2) list2_flat = list(itertools.chain.from_iterable(list2_flat_m)) list2_flat.insert(6,'C++') print(list2_flat) |
実行結果
insert()でリスト(List)全体の指定した位置に要素を追加しています。
そのため、下記のような結果が表示されています。
- 2次元リスト(List)をフラットにした1次元リストの2番目に「Java」が追加
- 3次元リスト(List)をフラットにした1次元リストの7番目に「C++」が追加
insert()を使用した実際のケース
insert()を使用した実際のケースについてご紹介します。
例えば、insert()を使用して入力したユーザーが登録された順番に表示されるようなコードを作成します。
● index.htmlとindex2.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!DOCTYPE html> <html lang="ja"> <head> <title>insert()でリストの指定した位置に要素を追加</title> <meta charset="utf-8"/> </head> <body> <h1>ユーザー一覧</h1> <h2>ユーザーを入力</h2> <form action="/" method="POST"> <div> <input type="text" name="item1"> </div> <button type="submit">登録</button> </form> <h2>登録されたユーザー</h2> <ul> {% for item in item_list: %} <li>{{ item }}</li> {% endfor %} </ul> </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 33 | from flask import Flask, render_template, request import time app = Flask(__name__) item_list = ['tanaka1234', 'suzuki5678', 'sato1919'] timestamp_list = [2302677700.8515599, 1532677700.385349, 932677700.1349] @app.route('/') def index(): return render_template('index.html', item_list = item_list) @app.route('/', methods=['POST']) def index2(): item_val = request.form.get('item1') in_timestamp = time.time() cnt = 0 for timestamp in timestamp_list: if(timestamp < in_timestamp): break else: cnt = cnt + 1 timestamp_list.insert(cnt, timestamp) item_list.insert(cnt, item_val) return render_template('index2.html', item_list = item_list) if __name__ == '__main__': app.run() |
実行結果-1
実行結果-2
insert()で登録順に入力したユーザーを表示しています。
今回は下記のような処理を行っています。
- 入力した値を受け取り、そのタイミングでタイムスタンプを取得。
- リストに格納されているタイムスタンプと比較するため、繰り返し処理を行う。
(条件はリストのタイムスタンプよりも大きいかどうか) - 条件を満たした場合に繰り返し処理を終了し、insert()でその位置に要素として格納する。
- 格納したリストの要素を画面に表示する。
そのため、結果1の場合は「yamada5789」が2番目に表示されています。
また、結果2の場合は他のユーザー名の登録時間が「yamada5789」の登録時間よりも最新であることから、4番目に表示されています。
insert()でリスト(List)以外の指定した位置に要素を追加する場合
ここでは、insert()でリスト(List)以外の指定した位置に要素を追加します。
タプル型の場合
タプル型にinsert()を使用することはできません。
そのため、list()で一度変換したリストに対して使用する必要があります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | print('● 対象のリスト') tuple1 =('JavaScript', 'PHP', 'Python', 'C#', 'Java') print(tuple1) print("● insert()使用後-1") tuple1_list = list(tuple1) tuple1_list.insert(3, 'Swift') print(tuple(tuple1_list)) print("● insert()使用後-2") tuple1_list = list(tuple1_list) tuple1_list.insert(-1, 'Kotlin') print(tuple(tuple1_list)) |
実行結果
insert()でタプル型の指定した位置に要素を追加しています。
今回は「0」と「2」と「4」を格納したリストに対して使用したため、1番目と3番目と5番目に「Java」が追加されています。
集合(set)型の場合
集合(set)型の場合もlist()で一度リストに変換する必要があります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 | print('● 対象の集合型') set1 = set(['JavaScript', 'PHP', 'Python', 'C#', 'Java']) print(set1) set_list1 = list(set1) print("● insert()使用後-1") set_list1.insert(2, 'Swift') print(set(set_list1)) print("● insert()使用後-2") set_list1.insert(-2, 'Kotlin') print(set(set_list1)) |
実行結果
insert()で集合(Set)型の指定した位置に要素を追加しています。
集合(Set)型は順番が決まっていないため、追加はされていますが、ランダムで格納されています。
不変な集合(frozenset)型の場合
不変な集合(frozenset)型に対してもinsert()を使用することはできません。
そのため、こちらもlist()で一度リストに変換する必要があります。
● main.py
1 2 3 4 5 6 7 8 9 10 11 12 | print('● 対象の不変な集合型') fset1 = frozenset(['JavaScript', 'PHP', 'Python', 'C#', 'Java']) print(fset1) fset_list1 = list(fset1) print("● insert()使用後-1") fset_list1.insert(2, 'Swift') print(frozenset(fset_list1)) print("● insert()使用後-2") fset_list1.insert(-2, 'Kotlin') print(frozenset(fset_list1)) |
実行結果
insert()で不変な集合(frozenset)型の指定した位置に要素を追加しています。
不変な集合(frozenset)型もSet型同様に順番が決まっていないため、こちらもランダムで格納されています。
リスト(List)の指定した位置に要素を追加する他の方法
リスト(List)の指定した位置に要素を追加する他の方法としてスライスがあります。
スライスとは、オブジェクトの一部を切り取る機能になります。
そのため、切り取り開始位置と終了位置を同じインデックスで指定し、別のリストを指定することでリスト(List)の指定した位置に要素を追加することができます。
● main.py
1 2 3 4 5 6 7 | print('● 対象のリスト') list1 = ['JavaScript', 'PHP', 'Python', 'C#', 'Java'] print(list1) print("● スライス使用後") list1[2:2] = ['Swift', 'VBA', 'C++'] print(list1) |
実行結果
スライスでリスト(List)の指定した位置に要素を追加しています。
そのため「Swift」、「VBA」、「C++」の要素が3番目から追加されています。
まとめ
● insert()とは、リスト(List)の指定した位置に要素を追加する関数である。
● insert()は、下記のパラメータを指定して使用する。
・追加する位置(必須)
・追加する要素(必須)
● 追加する要素がリテラルである場合にinsert()を使用すると、一つの要素としてリストの指定した位置に追加する。
● 追加する要素がイテレータである場合にinsert()を使用すると、一つのイテレータ要素としてリストの指定した位置に追加する。
● 追加する位置に要素数未満のインデックスを指定すると、リストの指定した位置に要素を追加する。
● 追加する位置に要素以上のインデックスを指定すると、リストの末尾に要素を追加する。
● 追加する位置に負の整数を指定すると、リストの末尾から数えた位置に要素を追加する。
● insert()は1次元リスト(List)だけでなく、多次元リストにも使用できる。
(アクセスする場所によって対象のList(リスト)が異なるため注意。)
● insert()でリスト(List)の指定した複数の位置に要素を追加するには繰り返し処理を使用する。
● 直接使用できないが、insert()はリスト(List)以外の下記のイテレータにも使用することができる。
・タプル(tuple)型
・集合(set)型
・不変な集合(frozenset)型
● リスト(List)の指定した位置に要素を追加する他の方法としてスライスがある。