【Pythonデータ構造】List(リスト)の生成と関連メソッド全てを図解で解説

スポンサーリンク
Pythonの基礎文法(リストの生成と関連メソッド) Python

Pythonの基礎文法を図を用いて分かりやすく解説していきます。

今回はPythonのデータ構造の一つであるリスト<list>を生成する方法について解説してきます。Pythonでは主にこのリストを使ってデータの処理を行っていくという特徴があります。また、他のプログラミング言語でいうところの配列に相当するものですが、通常の配列とリストでは次のような点で違いがあることを理解しておくとよいでしょう。

➀要素数の可変長がしやすい。

➁異なるデータ型の要素を混在させることができる

➂物理メモリ配置(アドレス)を意識しない

また、Python公式ドキュメントのリストに関する定義は以下になりますので必要に応じて参照してください。

Python公式ドキュメントの引用

https://docs.python.org/ja/3/library/stdtypes.html#list
スポンサーリンク

1. リストを生成する

Python_基礎構文(List)_生成

リストの生成する方法を順番に解説していきます。

1.1 []を使ったリストの生成

リストをつくる方法はいくつかあるのですが、もっとも基本となるのが、”[”, “]”の中に要素(整数や文字列)を,カンマ区切りで設定していく方法です。

各要素には、整数、実数、文字列、ブール値、タプルなどのイミュータブルな要素、さらにリストや辞書といったミュータブルなものをもたせることができます。(図1)

リストの書式(1)
図1 リストの書式(1)

また、リストの各要素には図2のように識別番号(インデックス)が割り振られており、List_Aとラベルを付けた場合は、List_A[0], List_A[1], List_A[-1], List_A[-2] といったように要素を個別に取り出すことができます。

リストの書式(2)
図2 リストの書式(2)

またリストには次のような基本規則があります。

➀ データを構成する要素は自在に追加・削除・挿入を行うことができる

➁ 異なるデータ型の要素を混在させることができる

➂ 同じ値をもつ要素が複数含まれていても問題ない

➃ 文字列を設定する場合は”(ダブルクオーテーション)又は、‘(シングルクオーテーション)で囲む

➄  ,(カンマ)の前後に空白を入れても、入れなくてもよい

以下にて具体例を示します。


例1.基本的なリストの作成事例になります。リストの要素には整数や文字列、あるいはそれらを混在させることができます。また、文字列は“”, ‘’のどちらを使っても定義できますが、リスト内では‘’に統一されます。

また、インデックスを使って各要素にアクセスできます。インデックスは前方から(0~)と後方から(-1~)の2通りの指定ができます。

# []を使ったリスト作成の基本

numbers = [4, 8, 15, 16, 23, 42]    # (1)要素が整数の場合
print(numbers)
# >> [4, 8, 15, 16, 23, 42]

colors = ["red", "green", 'blue']   # (2)要素が文字列の場合
print(colors)
# >> ['red', 'green', 'blue']

mixture = [1, 2, 3, "a", "b", "c", True, False]  # (3)要素が整数と文字列、ブール値の混在
print(mixture)
# >> [1, 2, 3, 'a', 'b', 'c', True, False]

#-----------------------------------------------------------
# インデックスを使って要素を参照する

print(numbers[0], numbers[5], numbers[-6], numbers[-1]) # (4)インデックス 0と-6, 5と-1は同じ要素を指す
# >> 4 42 4 42

print(mixture[0], mixture[3], mixture[6])
# >> 1 a True

例2.リストを定義する際に、変数名を直接、要素に設定することができます。リスト内では変数の値が要素に置き換われます。変数名そのものが要素になるわけではないので注意してください。

a = 10      # 変数を初期化する
b = 20
c = 30
d = 'ABC'
e = True

#----------------------------------------------------------------------
# 変数を要素に指定してリストを定義する

result = [a, b, c, d, e]
print(result)

# >> [10, 20, 30, 'ABC', True] 変数の値を要素とするリストが作成される

例3.同じ要素が繰り返し入ってくるリストを作る場合は「リスト*繰り返し回数」で効率的に作成することができます。

# 同じ要素が繰り返し入ってくるリストを作る

nums = [0]*10      # 0の要素を10個もつリストをつくる
print(nums)
# >> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

strs = ["xyz"]*5      # "xyz"の要素を10個もつリストをつくる
print(strs)
# >> ['xyz', 'xyz', 'xyz', 'xyz', 'xyz']

data = [1,2,3]*3    # 1, 2, 3の組合せの要素を3つもつリストをつくる
print(data)
# >>[1, 2, 3, 1, 2, 3, 1, 2, 3]

1.2 組込み関数 list() を使ったリストの生成

組込み関数 list() を使ってイテラブルなオブジェクトをリストを変換することもできます。書式は次のとおりです。

組込み関数 list()

list(iterable)


引数1:iterable:イテラブルなオブジェクトを指定する

イテラブルなオブジェクトにはrangeオブジェクト, タプル, 文字列がある

引数を省略した場合は、空のリストが生成される

戻り値:Listオブジェクト


List()関数の実使用例を以下に示します。

# list関数の引数にイテラブルなオブジェクトを使ったリストの作成例

list_range = list(range(-2, 2)) # 引数にrangeオブジェクト(始点,終点)を指定
print(list_range)
# >> [-2, -1, 0, 1]

list_even = list(range(0, 10, 2)) # 引数にrangeオブジェクト(始点,終点,ステップ)を指定
print(list_even)
# >> [0, 2, 4, 6, 8]

list_x3 = list(range(0, 15, 3)) # 引数にrangeオブジェクトを指定し3の倍数をもつリストを生成
print(list_x3)
# >> [0, 3, 6, 9, 12]


# list関数の引数にその他イテラブルなオブジェクトを使ったリストの作成

list_tuple = list((1,2,3,4)) # 引数にタプルを指定
print(list_tuple)
# >> [1, 2, 3, 4]

list_dict = list({'key1':1, 'key2':2}) #引数に辞書を指定(keyのみ要素となることに注意)
print(list_dict)
# >> ['key1', 'key2']

#-----------------------------------------------------------------------------------------------
# list関数の引数に文字列を指定したリストの作成例

list_words = list("日月火水木金土")
print(list_words)
# >> ['日', '月', '火', '水', '木', '金', '土']

list_words = list("Hello World")
print(list_words)
# >> ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

#-----------------------------------------------------------------------------------------------
# list関数の引数を省略した場合

list_brank = list()    #引数なし
print(list_brank)
# >> []

2.リストに関連したメソッド

Python_基本文法_内包表記

Listオブジェクトには関連メソッドが用意されています。代表的なメソッドの概要と使用例を紹介していきます。

Python公式ドキュメントの引用(シーケンス型)

https://docs.python.org/ja/3/library/stdtypes.html#mutable-sequence-types

2.1 リストの末尾に要素を追加する <append()メソッド>

既存のListオブジェクトに要素を追加(末尾)する場合は、appendメソッドを使います。書式と概略図は次のとおりです。

Listオブジェクト appendメソッド

Listオブジェクト.append (val)


引数1:val:末尾に追加する要素を指定

append関数のイメージ
図3 appendメソッド概略図

appendメソッドの使用例を示します。新規リストを作る場合は中身のない空のリストをあらかじめ用意しそこに要素を追加していきます。追加できる要素には数値や文字列はもちろんのことリストやタプル、辞書といったオブジェクトも追加することができます。

# append()メソッドの使用例

data = []           # 空のリストを用意
data.append(10)     # 末尾に10を追加
data.append(20)     # 末尾に20を追加

print(data)
# >>[10, 20]

data.append(30)     # 末尾に30を追加

print(data)
# >>[10, 20, 30]

#-----------------------------------------------------------------------------
data.append([1, 2])             # リストを追加
data.append({ "key1": 123 })    # 辞書を追加
data.append((1, 2))             # タプルを追加

print(data)
# >> [10, 20, 30, [1, 2], {'key1': 123}, (1, 2)]

2.2 リストに新規要素を挿入する <insert()メソッド>

既存のListオブジェクトに要素を挿入する場合は、insertメソッドを使います。書式と概略図は次のとおりです。

Listオブジェクト insertメソッド

Listオブジェクト.insert(index, val)


引数1:index:要素を挿入する位置(インデックス)を指定する

引数2:val:挿入する要素を指定する

insert関数のイメージ
図4 insertメソッド概略図

insertメソッドの使用例を示します。第1引数に挿入する位置、第2引数に挿入する要素を指定します。挿入した要素以降のインデックスは、後ろにずれていきます。

追加できる要素には数値や文字列はもちろんのことリストやタプル、辞書といったオブジェクトも追加することができます。

# insert()メソッドの使用例

data = ["a", "b", "c", "d", "e"]
data.insert(2, 1)                  # 2つ目の要素に(先頭3番目の要素)数値を挿入

print(data)
# >>['a', 'b', 1, 'c', 'd', 'e']   # 以降の要素は一つづつずれる

data.insert(2, "apple")            # 2つ目の要素に 文字列を挿入
print(data)
# >>['a', 'b', 'apple', 1, 'c', 'd', 'e']  # 以降の要素は一つづつずれる

#-----------------------------------------------------------------------------
data.insert(2, [1, 2])           # 2つ目の要素にリストオブジェクトを挿入
data.insert(2, { "key1": 123 })  # 2つ目の要素に辞書オブジェクトを挿入
data.insert(2, (1, 2))           # 2つ目の要素にタプルオブジェクトを挿入

print(data)
# >> ['a', 'b', (1, 2), {'key1': 123}, [1, 2], 'apple', 1, 'c', 'd', 'e']

2.3 リストから位置を指定して要素を抜き取る <pop()メソッド>

既存のListオブジェクトから位置を指定して要素を抜き取るにはpop()メソッドを使用します。書式と概略図は次のとおりです。

Listオブジェクト popメソッド

Listオブジェクト.pop(index)


引数1:index:index:抜き取る要素の位置 (インデックス)を指定する※

※引数を省略すると末尾の要素を抜き取ることになります。

※また、空のリストからpop()するとIndexエラーが発生します。

戻り値:抜き取った要素

数の指定方法により動作がかわります。引数を省略した場合は最後の要素が抜き取りの対象になります。(1)

pop(1)
図5 popメソッド概略図(1)

また、リストから指定の要素を抜き取る場合は対象のインデックスを引数に指定します(2)。(例えば、pop(0)で先頭の要素、pop(1)で2番目の要素といった具合)抜き取った要素以降の要素が前に順次ずれて再配置されます。

pop(2)
図6 popメソッド概略図(2)

また、(1)(2)のいずれの場合も抜き取り対象の要素が戻り値となります。


pop()メソッドの使用例です。2つの要素をもつリストから順番に末尾のデータを抜き出します。空のリストからさらにpop()を実行するとエラー(IndexError)が発生しています。

# pop()メソッドの使用例

words = ["blue", "red"]

pop_word = words.pop()     # ➀末尾の要素(red)を抜き取る
print(words)               # >>['blue'] 残ったリストは'blue'のみ
print(pop_word)            # >>red 抜き出した要素'red'が戻り値になる

pop_word = words.pop()     # ➁末尾の残りの要素(blue)を抜き取る
print(words)               # >>[]空のリストとなる
print(pop_word)            # >>blue 抜き出した要素'blue'が戻り値になる

#-----------------------------------------------------------------------
pop_word = words.pop()    # ➂空のリストから抜き取る(エラー発生)
                          # >>IndexError: pop from empty list

2.4 リストから要素(値)を指定して抜き取る <remove()メソッド>

既存のListオブジェクトから要素(値)を指定して削除をするにはremove()メソッドを使用します。書式と概略図は次のとおりです。

※指定した要素(値)がリストに存在しない場合はValueエラーが発生します。

Listオブジェクト popメソッド

Listオブジェクト.remove(targetVal)


引数1:target:抜き取る要素(値)を指定する※

※指定した要素(値)がリストに複数個存在する場合は、最初の一つが削除されます

※指定した要素(値)がリストに存在しない場合はValueエラーが発生します

remove関数のイメージ
図7 removeメソッド概略図

削除したい値が複数個ある場合には、最初に見つかった値が削除されます。ただし、削除しようとした値がリストに含まれていない場合はエラー(Value Error)となります。


remove()メソッドの使用例です。リストから特定の要素(‘red’)を削除していきます。要素(‘red’)は複数あるので、実行する度に最初に見つかったものから順番に削除します。リストに存在しない要素を削除しようとするとValueエラーが発生します。

# remove()メソッドの使用例(1)

words = ["blue", "red", "yellow", "red", "green"]

words.remove("red")             # 1つ目の"red"の取り出し➀
print(words)                    # >>['blue', 'yellow', 'red', 'green']

words.remove("red")             # 2つ目の"red"の取り出し➁
print(words)                    # >>['blue', 'yellow', 'green']

words.remove("red")             # 3つ目の"red"を取り出そうとしてもないのでエラー➂
print(words)                    # ValueError: list.remove(x): x not in list

Valueエラーを防ぐ目的のため実行前に for in:, while in:ステートメントで判定してからremove()メソッドを実行する例です。

# remove()メソッドの使用例(2)

# if-in文によるエラー回避策

words = ["blue", "red", "yellow", "red", "green"]

if "red" in words:          # if-in文による判定➀
    words.remove("red")     # 1つ目の"red"の取り出し
    print(words)            #  >>['blue', 'yellow', 'red', 'green']


if "red" in words:          # if-in文による判定➁
    words.remove("red")     # 2つ目の"red"の取り出し
    print(words)            #  >>['blue', 'yellow', 'green']

    
if "red" in words:          # if-in文による判定➂
    words.remove("red")     # if-in文がFalseになるためこのremoveは実行されない
    print(words)

#-----------------------------------------------------------------------
# while-in文によるエラー回避策

words = ["blue", "red", "yellow", "red", "green"]

while "red" in words:       # "red"がリストに内包している間くり返してremove()を実行する
    words.remove("red")

print(words)    # >>['blue', 'yellow', 'green']

2.5 リストの要素を昇順・降順に並べる <sort()メソッド>

Listオブジェクトの要素を昇順または降順に並び替えるにはsort()を使用します。書式と概略図は次のとおりです。

降順に並び替える場合はTrueを設定します※

Listオブジェクト sortメソッド

Listオブジェクト.sort(reverse)


引数1:reverse:降順に並び替える場合はTrueを設定します※

※オプショナル引数で、通常は引数を省略し、省略した場合は昇順になります。

sort関数のイメージ
図8 sortメソッド概略図

並び替えの対象になる要素は「数値」「文字(列)」とその混合です。引数reverseにTrueを設定することで降順に並べることができます。

元のリストそのものを変更する不可逆的なソートを実行します。似たような標準関数としてsorted()がありますが、こちらは元のリストを変更させずコピーしたリストを並べ替えます。


sort()メソッドの使用例です。数値・文字混合した順番でソートします、文字列の場合は大文字がより優先されます。

# sort()メソッドの使用例

numbers = [24, 45, 12, 9, 4, 35]  # 初期リスト(数値)
numbers.sort()                    # sort()メソッドで昇順に並べ替える➀
print(numbers)                    # >>[4, 9, 12, 24, 35, 45] 元のリストが昇順に整列された

words = ['s','z', 'e', 'a', 'q', 'r' ]   # 初期リスト(文字)
words.sort()                             #  sort()メソッドで昇順に並べ替える➁
print(words)                             # >> ['a', 'e', 'q', 'r', 's', 'z'] 元のリストが昇順に整列された

number_word = ['Abc', 'abc', 'no3', 'no1']   # 初期リスト(文字列+数値)
number_word.sort()                           #  sort()メソッドで昇順に並べ替える➂
print(number_word)                           # >>['Abc', 'abc', 'no1', 'no3'] 元のリストが昇順に整列された

#-----------------------------------------------------------------------------------

numbers = [24, 45, 12, 9, 4, 35]  # リストを初期値に戻す
numbers.sort(reverse = True)      # sort()メソッドの引数revrseにTrueを設定して降順に並べ替える
print(numbers)                    # >>[45, 35, 24, 12, 9, 4] 元のリストが降順に整列された

2.6 リストの要素の並びを逆順にする< reverse()メソッド>

Listオブジェクトの要素の並び順(インデックス)を逆にするにはreverse()メソッドを使います。書式と概略図は次のとおりです。

Listオブジェクト reverseメソッド

Listオブジェクト.reverse()


引数の指定はありません

reverse関数のイメージ
図9 reverseメソッド概略図

元のリストそのものを変更する不可逆的な順番の入れ替えを行います。

reverse()メソッドの使用例は次のとおりです。

# reverse()メソッドの使用例

numbers = [24, 45, 12, 9, 4, 35] # 初期リスト
numbers.reverse()                # reverse()メソッドで要素を並びを逆順にする➁
print(numbers)                   # >> [35, 4, 9, 12, 45, 24] 要素の並びが逆順になった

2.7 リスト内の要素の位置(インデックス)を調べる <index()メソッド>

Listオブジェクトの要素の位置(インデックス)を調べるにはindex()メソッドを使います。書式と概略図は次のとおりです。

Listオブジェクト indexメソッド

Listオブジェクト.index(serch_val)


引数1:search_val:位置(インデックス)を調べたい要素の値を指定する

戻り値:インデクス

index関数のイメージ
図10 indexメソッド概略図

引数に指定した値がリストのどの位置にあるのかを調べそのインデックスを返します。もし、リスト内に存在しなかった場合はValueエラーが発生しますので、先に示したようにfor in: while in:ステートメントで判定してからindex()メソッドを実行するのが良いでしょう。


index()メソッドの使用例は次のとおりです。

# index()メソッドの使用例

list_A = ["apple", "orange",123 , "banana", "remon"]

# indexメソッドの実行による要素のインデックスを調べる
print(list_A.index("apple"))  # >>0 インデックス0の要素である
print(list_A.index("orange")) # >>1 インデックス1の要素である
print(list_A.index(123))      # >>2 インデックス2の要素である

#-------------------------------------------------------------------

# リストに存在しない場合はエラーが発生する
print(list_A.index("xyz")) # >>ValueError: 'xyz' is not in list

2.8 指定した値がリスト内に含まれている個数を調べる <count()メソッド>

Listオブジェクトに特定の要素が何個含まれているかを調べる方法としてcount()メソッドがあります。書式と概略図は次のとおりです。

Listオブジェクト countメソッド

Listオブジェクト.count(target_val)


引数1:target_val:個数を調べる要素(値)を指定する

戻り値:リスト内に含まれるtarget_valの個数

count関数のイメージ
図11 countメソッド概略図

引数に指定した要素(値)がリスト中に何個含まれるかを数えます。部分一致ではなく完全一致したものをカウントします。たとえば、「a」[aa]の要素は別物としてカウントします。なお、リスト中に存在しなかった場合は0が戻ります。


count()メソッドの使用例を示します。リスト中に存在しない値を指定してもエラーとはならずに0が戻ります。また、「a」[aa][ab]などは別ものとして認識され完全一致した値のみをカウントしていることが確認できます。

# count()メソッドの使用例

numbers = [1, 2, 2, 3, 3, 3, 4, 5, 6]

print(numbers.count(1))  # >> 1
print(numbers.count(2))  # >> 2
print(numbers.count(3))  # >> 3
print(numbers.count(9))  # >> 0

#-------------------------------------------------------------------

words = ['a','a','a','aa','ab','b','b','c','e', 1]

print(words.count('a'))  # >>3 完全一致した場合カウントする'aa', 'ab'など部分一致はカントしない
print(words.count('aa')) # >>1
print(words.count('ab')) # >>1
print(words.count('b'))  # >>2
print(words.count(1))    # >>1 文字・数値が混在したリストからでもカウントすることができる

3.まとめ

最後にまとめになります。

冒頭にも触れましたが、Pythonではリスト(配列)を多用してデータ処理をしていくプログラミング言語です。リストの生成方法やリストオブジェクトに関連するメソッドの存在を知っておくことは重要になります。

<リスト>についてまとめると次のような特徴がありますので押さえておきましょう。

➀データを構成する要素は自在に追加・削除・挿入を行うことができる

➁異なるデータ型の要素を混在させることができる

➂同じ値をもつ要素が複数含むことができる

➃他言語の配列に相当する。(アドレス空間を意識する必要は基本ない)

➄Listオブジェクトには様々なメソッドが用意されている。

以上、Pythonの基礎文法としてリストの作成と関連メソッドの使い方について解説しました。

最後までお読みいただきありがとうございました。

タイトルとURLをコピーしました