Python

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

この記事では、Pythonのリスト(list)の使い方を解説します。リストは、要素の追加・変更・削除が行え、汎用性が高いシーケンスの1つです。最もよく使用されるコレクションなのでしっかり学んでいきましょう。それでは、リストの使い方を見ていきましょう❗️

リストとは?

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

シーケンスとは複数のデータを扱える型のことを言います。特徴的なのは格納された要素が順番を持つことです。もう少し詳しく知りたい方は以下の記事を参照してください。

【Python】シーケンスとは?特徴と使い方を解説この記事では、Pythonのシーケンス(sequence)について解説します。シーケンスとは、文字列やリストのような順番を持った複数の要素をまとめて扱える型のことを言います。シーケンス特有の演算も定義されているので、確認していきましょう!...

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

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

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

リストの生成

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

変数 = []

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]
【Python】シーケンスの任意の範囲の要素を取得するスライスの使い方この記事では、Pythonのスライスの使い方を解説します。スライスは、シーケンスオブジェクトの要素を範囲で選択できます。選択した要素は、...

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

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

vals = [1, 2, 3]

for val in vals:
    print(val)
>> 1
>> 2
>> 3

スライスと組み合わせることで任意の範囲の要素のみ順番に取得できる。

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

for val in vals[2:4]:
    print(val)
>> 3
>> 4
【Python】for文の使い方【ループ処理】この記事では、Pythonのfor文の使い方を解説します。for文を使うことでイテラブルの要素を1つずつ取り出し、for文ブロック内を繰り返し(ループ)処理することができます。それでは、for文の使い方を見ていきましょう!...

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

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

l = [1, 2, 3]

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

print(v1)
>> 1
print(v2)
>> 2
print(v3)
>> 3
【Python】配列の要素を展開して変数に代入する方法を解説【アンパック】この記事では、Pythonのアンパックについて解説します。アンパックとは、配列の要素を展開し、変数に代入することを言います。また、関数の引数としてリストや辞書を展開して渡すこともでき、とても便利です。それでは、アンパックの使い方を見ていきましょう!...

任意の要素の変更

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

list[インデックス] = データ

サンプル

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

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

array[1] = 2

print(array)

実行結果

['one', 2, 'three']

長さの取得 [len関数]

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

len(s)

サンプル

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

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

print(length)

実行結果

3

要素の追加

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

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

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

list.append(追加したい要素)

サンプル

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

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

print(item)

実行結果

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

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

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

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

サンプル

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

array = [1, 2, 3]

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

実行結果

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

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

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

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

サンプル

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

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

print(nums)

実行結果

[1, 2, 4, 3] 

要素の削除

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

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

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

list.remove(削除したい要素)

サンプル

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

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

print(nums)

実行結果

[2, 3, 1]

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

pop()メソッドを使ってリストの要素を取り出すことができます。

list.pop()

引数にインデックスを指定しなければ末尾の要素が取り出され、インデックスを指定することで任意の要素を取り出すことができます。

list.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()メソッドを使って全ての要素を削除できます。

list.clear()

サンプル

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

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

print(nums)

実行結果

[]

並び替え

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

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

sort()メソッドを使うことでリストを昇順で並び替えることができます。

list.sort()

オプション引数のreverseTrueにすることで降順で並び替え可能。

list.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]
【Python】リストやイテラブルの要素を昇順・降順で並び替える【ソート】この記事では、リストの要素を並び替える方法を解説します。要素を並び替えるには、リストに定義されているsort()メソッドを使うか、組み込み関数であるsorted()関数を使います。sorted関数は、リスト以外のイテラブルの要素も並び替えることができるので便利です。...

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

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

list.reverse()

サンプル

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

array = [1, 2, 3]

array.reverse()
print(array)

実行結果

[3, 2, 1]
【Python】リスト含むシーケンスの要素を逆順にする方法この記事では、リストやタプルなどのシーケンスの要素を逆順に取得する方法を解説します。 並び替え(ソート)をしたい場合は、以下の記事...

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

sorted()関数を使うことで昇順で並び替えたリストを新しく生成できます。

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

reverseTrueにすることで降順で並び替えします。

並び替えたリストを受け取る変数 = 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()メソッドを使うことで、指定した要素のインデックスを取得できます。最初にマッチした要素のインデックスのみを取得します。

list.index(検索したい要素)

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

list.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()メソッドを使うことで、指定した要素がリストにいくつ格納されているか取得できます。

list.count(数えたい要素)

サンプル

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

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

print(count)

実行結果

7

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

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

検索したい要素 in リスト

サンプル

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

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

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

実行結果

True
False

リスト内の文字列の結合

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

''.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(ラムダ)式を組み合わせることで、指定した要素をまとめて削除できます。第一引数には、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』