Python

【Python】リストの使い方【list】

この記事では、Pythonのリスト(list)の使い方を解説します。リストは、要素の追加・変更・削除が行え、汎用性が高いシーケンスの1つです。それでは、リストの使い方を見ていきましょう❗️

リストとは?

リストとは、異なる型の要素を任意の数だけ格納できるシーケンスです。

シーケンスとは、複数の要素が一定の順序で並んでいるオブジェクトのことを言う

特徴としては、インスタンス化した後でも要素の追加・削除・変更を行えることです。そのような性質を持つオブジェクトを「ミュータブル」と呼びます。

しかし、要素を変更するためのメソッドなどが実装されているため、タプルよりも処理速度は遅いです。

  • 可変(ミュータブル)
  • 同じ型の要素を格納することが多い
  • 汎用性が高い
  • シーケンス型である

リストの生成

リストを生成するには、 [] を使います。

変数 = []

list()を使っても生成できます

変数 = list()

[] 内に要素を「,(カンマ)」で区切って記述することで、初期値を指定できます。

変数名 = [要素1, 要素2, ..., 要素N]

サンプル

試しにリストを作成して出力してみます。

l1 = []
l2 = [1, 2, 3]

print(l1)
print(l2)

実行結果

[]
[1, 2, 3]

要素の取得

リストの要素を取得するには、以下の方法があります。

任意の要素にアクセスする[インデックス]

オブジェクト名の末尾に「[インデックス]」を指定することで、そのインデックスの要素を取得することができます。

l = [1, 2, 3]

# 要素の取得(list[インデックス])
print(l[0])
>> 1
print(l[1])
>> 2
print(l[2])
>> 3

# 範囲外にアクセスするとIndexErrorが発生
print(l[3])
>> IndexError: list index out of range

任意の範囲の要素を取得する[スライス]

スライスを使うことで任意の範囲の要素をまとめて取得できます。

l = [1, 2, 3, 4, 5]

print(l[2:4])
>> [3, 4]

print(l[:3])
>> [1, 2, 3]

各要素にアクセスする[for文]

for文を使うことで、要素を1つずつ順番に取得できます。

l = [1, 2, 3]


for e in l:
    print(e)
>> 1
>> 2
>> 3

要素をバラバラに取得する[アンパック]

リストをアンパックすることで、要素をそれぞれ変数に代入できます。

l = [1, 2, 3]

# それぞれの変数に要素を1つずつ代入
v1, v2, v3 = l

print(v1)
>> 1
print(v2)
>> 2
print(v3)
>> 3

任意の要素の変更

リスト[インデックス] で変更したい要素にアクセスし、何かしらの値を代入することで、任意の要素を書き換えることができます。

リスト[インデックス] = データ

サンプル

試しに任意の要素を書き換えてみます。

array = ['one', 'two', 'three']

array[1] = 2

print(array)

実行結果

['one', 2, 'three']

長さの取得 [len関数]

len関数を使うことで、リストの長さを取得できます。

len(リスト)

試しにリストの長さを取得してみます。

nums = [1, 2, 3]
length = len(nums)

print(length)

実行結果

3

要素の追加

リストに要素を追加する方法を紹介します。

任意の要素の追加[appendメソッド]

appendメソッドを使って任意の要素を末尾に追加できます。

リスト.append(追加したい要素)

試しに要素を追加してみます。

item = ['ひのきのぼう']
item.append('やくそう')

print(item)

実行結果

['ひのきのぼう', 'やくそう']

要素の連結[extendメソッド、+=演算子]

extendメソッドを使って複数の要素を追加できます。引数にはリストやタプルなどのイテラブルオブジェクトを指定します。

リスト.extend(イテラブルオブジェクト)
+=演算子で要素を連結させるのと等価

試しに要素をまとめて追加してみます。

array = [1, 2, 3]

array.extend([4, 5, 1])
print(array)

実行結果

 [1, 2, 3, 4, 5, 1]

任意のインデックスに要素を挿入[insertメソッド]

insertメソッドを使って任意のインデックスに要素を挿入できます。第一引数に挿入したい場所(インデックス)を指定し、第二引数に追加する要素を指定します。

リスト.insert(インデックス, 要素)

試しに任意のインデックスに要素を挿入してみます。

nums = [1, 2, 3]
nums.insert(2, 4)

print(nums)

実行結果

[1, 2, 4, 3] 

要素の削除

リストの要素を削除する方法を紹介します。

任意の要素の削除[removeメソッド]

removeメソッドを使って任意の要素を削除できます。引数に指定した要素が削除されます。指定された要素が複数格納されている場合は、最初に見つけた要素のみが削除されます。

リスト.remove(削除したい要素)

試しに要素を削除してみます。

nums = [1, 2, 3, 1]
nums.remove(1)

print(nums)

実行結果

[2, 3, 1]

要素を取り出す[popメソッド]

popメソッドを使って要素を取り出せます。引数を指定しなければ末尾の要素が取り出されます。

リスト.pop()

インデックスを指定することで、任意の場所の要素を取り出すことができます。

リスト.pop(インデックス)

試しに要素を取り出してみます。

nums = [1, 2, 3, 4, 5]

# 一番後ろの要素の取り出す
num = nums.pop()
print(f'取り出した要素: {num}, nums: {nums}')

# 任意のインデックスの要素を取り出す
num = nums.pop(2)
print(f'取り出した要素: {num}, nums: {nums}')

実行結果

取り出した要素: 5, nums: [1, 2, 3, 4]
取り出した要素: 3, nums: [1, 2, 4]

全ての要素の削除[clearメソッド]

clearメソッドを使って全ての要素を削除できます。

リスト.clear()

試しにリストの要素を全て削除してみます。

nums = [1, 2, 3]
nums.clear()

print(nums)

実行結果

[]

並び替え

リストに格納された要素を並び替える方法を紹介します。

並び替える[sortメソッド]

sortメソッドを使うことでリストを並び替えることができます。デフォルトでは昇順で並び替えられます。

リスト.sort()

オプション引数のreverseをTrueにすることで降順で並び替えができます。

リスト.sort(reverse=True)

試しにリストを並び替えてみます。

array = [1, 2, 3, 1, 2]

# 昇順
array.sort()
print(array)

# 降順
array.sort(reverse=True)
print(array)

実行結果

[1, 1, 2, 2, 3]
[3, 2, 2, 1, 1]

逆順にする[reverseメソッド]

reverseメソッドを使うことでリストの並びを逆順にすることができます。

リスト.reverse()

試しにリストを逆順にしてみます。

array = [1, 2, 3]

array.reverse()
print(array)

実行結果

[3, 2, 1]

並び替えたリストを生成する[sorted関数]

sorted関数を使うことで並び替えたリストを新しく生成できます。デフォルトでは昇順で並び替えられます。

並び替えたリストを受け取る変数 = sorted(リスト)

reverseをTrueにすることで降順で並び替えします。

並び替えたリストを受け取る変数 = sorted(リスト, reverse=True)

試しに、並び替えたリストを新しく生成してみます。

array = [1, 2, 3, 1]

# 昇順
sort_array = sorted(array)

# 降順
sort_reverse_array = sorted(array, reverse=True)

print(f'並び替え前: {array}')
print(f'並び替え後(昇順): {sort_array}')
print(f'並び替え後(降順): {sort_reverse_array}')

実行結果

並び替え前: [1, 2, 3, 1]
並び替え後(昇順): [1, 1, 2, 3]
並び替え後(降順): [3, 2, 1, 1]

任意の要素のみを入れ替える

以下のように記述することで、任意の要素のみを入れ替えることができます。

vals = [1, 2, 3, 4, 5]

vals[1], vals[3] = vals[3], vals[1]

print(vals)

実行結果

[1, 4, 3, 2, 5]

要素の検索

リストに格納された要素を検索する方法を紹介します。

任意の要素のインデックスの取得[indexメソッド]

indexメソッドを使うことで、指定した要素のインデックスを取得できます。最初にマッチした要素のインデックスのみを取得します。

リスト.index(検索したい要素)

検索したい範囲を指定することができます。

リスト.index(検索したい要素, start, stop)

試しに任意の要素のインデックスを取得してみます。

nums = [1, 2, 3, 1, 2, 3]

# 最初に見つけた要素のインデックスを返す
idx = nums.index(2)
print(idx)

# 検索範囲を指定してみる(3 <= N < 6)
idx = nums.index(2, 3, 6)
print(idx)

実行結果

1
4

任意の要素がの数を取得[countメソッド]

countメソッドを使うことで、指定した要素がリストにいくつ格納されているか取得できます。

リスト.count(数えたい要素)

試しに任意の要素がいくつリストに格納されているか確認してみます。

name = ['ボ', 'ボ', 'ボ', 'ー', 'ボ', '・', 'ボ', 'ー', 'ボ', 'ボ']
count = name.count('ボ')

print(count)

実行結果

7

任意の要素が格納されているか[in演算子]

in演算子を使うことで、指定した要素がリスト内に格納されているか確認できます。要素が見つかった場合はTrue、見つからなかった場合はFalseが返されます。

検索したい要素 in リスト

試しに任意の要素がリストに格納されているか確認してみます。

family = ['悟空', 'チチ', '悟飯', '悟天']

print('悟飯' in family)
print('ベジータ' in family)

実行結果

True
False

リスト内の文字列の結合[joinメソッド]

str型のjoinメソッドを使うことで、引数に指定したリスト内の文字列同士を結合できます。リスト内に文字列以外が格納されている場合は、エラーが発生します。

''.join(リスト)

文字列の部分を書き換えることで、結合部の文字を指定できます。

'結合部の文字'.join(リスト)

試しに文字列を格納したリストを作成して、joinメソッドで結合させてみます。

array = ['あ', 'い', 'う', 'え', 'お']
aiueo = ''.join(array)

print(aiueo)

array = ['090', '1234', '5678']
# 結合部の文字を「-」に指定
tel = '-'.join(array)

print(tel)

実行結果

あいうえお
090-1234-5678

リスト内包表記

リスト内包表記を使うことで、簡単にリストを生成できます。

書式

内包表記は以下のように記述します。

[式 for 変数 in 反復可能オブジェクト]

if文を記述することもできます。if文を定義することで条件式がTrueの要素のみが返されるようになります。

[式 for 変数 in 反復可能オブジェクト if 条件式]
【Python】内包表記の使い方この記事では、Pythonの内包表記の使い方を解説します。内包表記を使うことで、単純なリストを低コストで生成することができます。また、同...

サンプル

試しに内包表記でリストを生成してみます。

l = [i for i in range(5)]
print(l)

l = [i*i for i in range(5)]
print(l)

l = [i for i in range(5) if i % 2 == 0]
print(l)

実行結果

[0, 1, 2, 3, 4]
[0, 1, 4, 9, 16]
[0, 2, 4]

任意の要素をまとめて削除する

filter関数とlambda式を組み合わせることで、指定した要素をまとめて削除できます。

filter関数の使い方

第一引数には、bool値を返す関数オブジェクトを指定します。

filter(関数オブジェクト, リスト)

filter関数の戻り値は、イテレーターオブジェクトなのでlist()で変換します。

list(filter(関数オブジェクト, リスト))

サンプル

試しに指定した要素を全て削除してみます。

array = ['削除', 'あ', '削除', 'い', 'う', '削除']
# elem != '削除' で削除する要素を指定
array = list(filter(lambda elem: elem != '削除', array))

print(array)

実行結果

['あ', 'い', 'う']
【Python】ラムダ式の使い方【匿名関数】この記事では、Pythonのラムダ式の使い方を解説します。ラムダ式を使うことで、その場限りでしか使わないような簡単な関数を1行で記述する...

任意の要素のインデックスを全て取得

内包表記enumrate関数を組み合わせることで、指定した要素のインデックスを全て取得できます。

以下のコードは、リストに格納されている1のインデックスを全て取得しています。

array = [1, 2, 3, 1, 2, 3, 1, 2, 3]
# if v == 1 で要素を指定
idx = [i for i, v in enumerate(array) if v == 1]

print(idx)

実行結果

[0, 3, 6]

まとめ

この記事では、Pythonのリストの使い方を解説しました。

リストにはたくさんのメソッドが実装されています。この量の内容を一度に覚えるのは難しいので徐々に慣れていきましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』