Python問題集を解いてみよう!!

【Python】位置を指定してリストに値を追加する

URLをコピーする
URLをコピーしました!
Pyボーイ

100要素がある配列で、例えば56番目に数値aを入れてそれ以降の中身を一つずつずらすといった事は可能なんでしょうか?

さらに例えると配列a,b,c,dで途中にeを挟んでa,b,e,c,dにするような事です。

LINEオープンチャットにこんな投稿がありました。

本ブログは Colofulbox で運用しています
目次

リストの場合は insert() メソッドを使う

リストの特定の位置に値を追加したい場合は、リスト型が持っているinsert()メソッドを使用します。

よく目にするappend()メソッドがはリストの末尾に値を追加する時に使用します。

['a', 'b', 'c', 'd']というリストの真ん中に「e」を追加したい場合は次のように書きます。

sample_list1 = ['a', 'b', 'c', 'd']

print(sample_list1)

sample_list1.insert(2, 'e')

print(sample_list1)

上記の実行結果

['a', 'b', 'c', 'd']
['a', 'b', 'e', 'c', 'd']

insert()メソッドの引数は2つです。

1つ目の引数には追加する位置を指定します。

この位置はリストのインデックス番号で指定します。

「2」を指定した場合、sample_list1[2]の直前に値を追加します。

追加後のsample_list1[2]が追加した値になる、と考えても良さそうです。

2つ目の引数には追加したい値を指定します。

また、insert()メソッドを使用する際に、1点、注意すべきことがあります。

それは、insert()メソッドはそのリスト自体を変更してしまう、ということです。

元のリストを保持したい場合はcopyモジュールのdeepcoopy()メソッドを使って複製しておきましょう。

import copy

sample_list2 = ['a', 'b', 'c', 'd']

sample_list3 = copy.deepcopy(sample_list2)

sample_list3.insert(2, 'e')

print(f'sample_list2 : {sample_list2}')

print(f'sample_list3 : {sample_list3}')

上記の実行結果

sample_list2 : ['a', 'b', 'c', 'd']
sample_list3 : ['a', 'b', 'e', 'c', 'd']

新しい変数を作り、その変数に元のリストを代入すると、元の変数も新しい変数も同じリストになるので、注意してください。

sample_list4 = ['a', 'b', 'c', 'd']

sample_list5 = sample_list4

sample_list5.insert(2, 'e')

print(f'sample_list4 : {sample_list4}')

print(f'sample_list5 : {sample_list5}')

上記の実行結果

sample_list4 : ['a', 'b', 'e', 'c', 'd']
sample_list5 : ['a', 'b', 'e', 'c', 'd']

NumPy ndarray の場合はinsert()関数を使う

Pythonで「配列」と聞くと、もう1つ、Numpy の c のことも思い浮かべるかもしれません。

ndarray の場合も見ておきましょう。

ndarray に位置を指定して値を追加したい場合、Numpy の insert()関数を使います。

import numpy as np

sample_array1 = np.array(['a', 'b', 'c', 'd'])

print(sample_array1)

sample_array2 = np.insert(sample_array1, 2, 'e')

print(sample_array2)

上記の実行結果

['a' 'b' 'c' 'd']
['a' 'b' 'e' 'c' 'd']

Numpy のinsert()関数の引数は3つです。

1つ目の引数には値を追加したい ndarray を指定します。

ここがリスト型が持つinsert()メソッドとの違いですね。

2つ目の引数には追加する位置を指定します。

位置の指定についてはリスト型が持つinsert()メソッドと同じです。

3つ目の引数には追加したい値を指定します。

また、リスト型が持つinsert()メソッドと違う点として次の2点があります。

  • 元のリストは変更しない
  • 値を追加した後の ndarray を戻り値とする

Numpy のinsert()関数のほうが使いやすいかもしれませんね。

元の ndarray を保持したい場合は別の変数に格納してあげれば良いし、保持する必要がなければ次のように上書きしてしまえば良いですね。

import numpy as np

sample_array3 = np.array(['a', 'b', 'c', 'd'])

print(sample_array3)

sample_array3 = np.insert(sample_array3, 2, 'e')

print(sample_array3)

上記の実行結果

['a' 'b' 'c' 'd']
['a' 'b' 'e' 'c' 'd']

Google Colaboratory

掲載しているコードは Google Colaboratory での動作を確認しています。

環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。

おわりに

今回は、

リストの特定の位置に値を追加する方法

をご紹介しました。

今後も具体的な問題・課題の解説記事を増やしていきたいと思っています。

解説して欲しい問題・課題がありましたら、お問い合わせフォームからご連絡ください。

以上です。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
閉じる