pythonのlist集中講義

まずlistは「コンテナデータ型」です。

コンテナデータ型にはどのようなものがあるかをチェックします。

カッコが”[]”とか”()”、”{}”と異なるので注意

pythonのコンテナデータ型 list / tuple / dic / setの概要

Pythonには、リスト(list)、タプル(tuple)、辞書(dictionary)、集合(set)などの複数のデータを格納するためのコンテナデータ型があります。

リスト(list)は、複数の要素を格納できる配列のようなデータ型で、要素の順番も保持されます。リストの要素は変更可能(mutable)で、追加、削除、変更などの操作が可能です。

fruits = ["apple", "banana", "cherry"]
print(fruits) # ["apple", "banana", "cherry"]
fruits.append("orange")
print(fruits) # ["apple", "banana", "cherry", "orange"]

タプル(tuple)は、リストと似て複数の要素を格納できるデータ型ですが、要素の順番も保持されます。違いは、タプルの要素は変更不可能(immutable)で、追加、削除、変更などの操作ができません。

fruits = ("apple", "banana", "cherry")
print(fruits) # ("apple", "banana", "cherry")
fruits.append("orange") #TypeError: 'tuple' object has no attribute 'append'

辞書(dictionary)は、キーと値の組み合わせでデータを格納するデータ型で、要素の順番は保持されません。辞書の要素は変更可能で、追加、削除、変更などの操作が可能です。

fruits = {"apple":100, "banana":200, "cherry":300}
print(fruits) # {"apple":100, "banana":200, "cherry":300}
fruits["orange"] = 400
print(fruits) # {"apple":100, "banana":200, "cherry":300, "orange":400}

集合(set)は、重複しない要素を格納するデータ型で、要素の順番は保持されません。集合の要素は変更可能です。

fruits = {"apple", "banana", "orange"}
print(fruits) # {"apple", "banana", "orange"}

python listの作り方

リストは複数の要素を格納するためのデータ構造で、要素を[]で囲みます。例えば、整数のリストは以下のように作成できますし、一般的です。

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

文字列のリストも作成できます。

words = ["apple", "banana", "cherry"]

list()関数を使って作成することもできます。

numbers = list(range(1, 6))
words = list('apple')

python listへの要素の追加方法

pythonのlistに要素を追加する方法には、以下のようなものがあります。

append()メソッドを使う方法

# 例: 数字のリストを作成し、3を追加する
numbers = [1, 2]
numbers.append(3)
print(numbers)
# [1, 2, 3]

+演算子を使って結合する方法

# 例: 文字列のリストを作成し、"c"を追加する
letters = ["a", "b"]
letters = letters + ["c"]
print(letters)
# ['a', 'b', 'c']

insert()メソッドを使って指定したインデックスに挿入する方法

# 例: 数字のリストを作成し、インデックス1に5を挿入する
numbers = [1, 2, 3]
numbers.insert(1, 5)
print(numbers)
# [1, 5, 2, 3]

extend()メソッドを使って別のリストを連結する方法

# 例: 数字のリストを作成し、[4, 5]を連結する
numbers = [1, 2, 3]
numbers.extend([4, 5])
print(numbers)
# [1, 2, 3, 4, 5]

上記のように色々な方法がありますので、使用目的や条件に合わせて使い分けることができます。

python listの要素の削除方法

pythonでlistの要素を削除するには、以下の方法があります。

del文を使用する

# インデックスで指定して削除
nums = [1, 2, 3, 4, 5]
del nums[1] # numsは[1, 3, 4, 5]になる

# スライスで指定して複数削除
nums = [1, 2, 3, 4, 5]
del nums[1:3] # numsは[1, 4, 5]になる

remove()メソッドを使用する

# 値で指定して削除
nums = [1, 2, 3, 4, 5]
nums.remove(3) # numsは[1, 2, 4, 5]になる

pop()メソッドを使用する

# インデックスで指定して削除
nums = [1, 2, 3, 4, 5]
nums.pop(1) # 2が返され、numsは[1, 3, 4, 5]になる

# インデックスを指定しなければ末尾から削除
nums = [1, 2, 3, 4, 5]
nums.pop() # 5が返され、numsは[1, 2, 3, 4]になる

clear()メソッドを使用する

nums = [1, 2, 3, 4, 5]
nums.clear() #numsは[]になる

以上の方法でlistの要素を削除することができますが、del文やpop()メソッドを使用することで取り除いた要素は変数に格納することができます。remove()メソッドは値が最初に見つかった要素を削除します。

python list 要素削除のまとめ

  • del: インデックスによって特定の要素を削除します。インデックスの指定が必要で、削除したい要素が複数ある場合は複数回実行する必要があります。
  • pop: インデックスによって特定の要素を削除し、削除した要素を返します。インデックスの指定が必要で、削除したい要素が複数ある場合は複数回実行する必要があります。
  • remove: 値によって特定の要素を削除します。値の指定が必要で、同じ値を持つ要素が複数ある場合は最初に見つかった要素のみが削除されます。
  • clear: リストからすべての要素を削除します。
# del
a = [1, 2, 3, 4, 5]
del a[1]
print(a) # [1, 3, 4, 5]

# pop
a = [1, 2, 3, 4, 5]
b = a.pop(1)
print(a) # [1, 3, 4, 5]
print(b) # 2

# remove
a = [1, 2, 3, 4, 5]
a.remove(3)
print(a) # [1, 2, 4, 5]

# clear
a = [1, 2, 3, 4, 5]
a.clear()
print(a) # []

上記のように、delはインデックスで要素を削除

popはインデックスで要素を削除し削除した要素を返します。取り出すイメージですね。

removeは値で要素を削除しますので、何番に入っているかの情報は不要

clearは全ての要素を削除します。

削除したい要素が複数ある場合、delpopを複数回実行する必要がありますが、removeは値が同じであれば、最初に見つかった要素を削除します。

python list 要素を検索する

カンタンな方法としてリストに特定の要素が含まれているかどうかを確認するには、in演算子を使用します。

例: if 6 in my_list: print(“6は含まれています”)

他にpythonでlistの要素を検索する方法には、次のようなものがあります。
inも含めて実例解説です。

in演算子を使用する

list内に特定の要素が含まれているかどうかを判定するためにin演算子を使用することができます。

>>> my_list = [1, 2, 3, 4, 5]
>>> 3 in my_list
True
>>> 6 in my_list
False

index()メソッドを使用する

list内で特定の要素が最初に現れるインデックスを返すためにindex()メソッドを使用することができます。

>>> my_list = [1, 2, 3, 4, 5]
>>> my_list.index(3)
2
>>> my_list.index(6)
ValueError: 6 is not in list

count()メソッドを使用する

list内に特定の要素が何個含まれているか数えるためにcount()メソッドを使用することができます。

>>> my_list = [1, 2, 3, 3, 4, 5]
>>> my_list.count(3)
2
>>> my_list.count(6)
0

enumerate()関数を使用する

list内の各要素に対して、インデックスと要素の値を同時に取得するためにenumerate()関数を使用することができます。

>>> my_list = [1, 2, 3, 4, 5]
>>> for i, v in enumerate(my_list):
...     print(i, v)
... 
0 1
1 2
2 3
3 4
4 5

上記のように、様々な方法でlistの要素を検索することができます。どの方法を使うかは、検索したい内容や用途によって異なります。

pythonでlist内の要素を検索するための方法まとめ

  • in: 指定した要素がリストに含まれているかどうかを判定するために使用します。指定した要素がリストに含まれている場合はTrue、そうでない場合はFalseを返します。
  • index: 指定した要素がリストの何番目に位置するかを返します。指定した要素がリストに含まれていない場合はValueErrorを返します。
  • count: 指定した要素がリストに何個含まれているかを返します。
  • enumerate: リストの要素を順番に取り出しながら、インデックス番号も取得するために使用します。

enumerateのイメージが少々湧きにくいかもしれないので実例

fruits = ['apple', 'banana', 'orange', 'apple', 'banana']
'apple' in fruits
True
fruits.index('orange')
2
fruits.count('apple')
2
for i, fruit in enumerate(fruits):
… print(i, fruit)

0 apple
1 banana
2 orange
3 apple
4 banana

python listの要素をインデックスで指定する方法

  • リストのインデックスは0から始まります。
fruits = ['apple', 'banana', 'orange']
print(fruits[0]) # 'apple'
print(fruits[1]) # 'banana'
  • 負のインデックスを使うことで、末尾からのインデックスを指定することもできます。
fruits = ['apple', 'banana', 'orange']
print(fruits[-1]) # 'orange'
print(fruits[-2]) # 'banana'

python listからインデックスを取得する方法

pythonでlistからインデックスを取得する方法には、list.index(要素)を使う方法と、enumerate(list)を使う方法があります。

list.index(要素)を使う方法

fruits = ['apple', 'banana', 'orange']
index = fruits.index('banana')
print(index) # 1

enumerate(list)を使う方法

fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
    if fruit == 'banana':
        print(index) # 1

list.index(要素)は、指定した要素が最初に出現する位置のインデックスを返します。 enumerate(list)は、リストの要素とインデックスを取得するためのイテレータを返します。

インデックスを取得する場面によって使い分けることができます。

python listからデータを取り出す方法

pythonでlistからデータを取り出す方法には、

インデックス番号を指定して取り出す方法
for文を使って順番に取り出す方法
スライスを使ってまとめて取り出す方法
イテレータ(後述)を使って取り出す方法

があります。

インデックス番号を指定して取り出す方法:

# リストを作成
my_list = [1, 2, 3, 4, 5]

# インデックス番号が2の要素を取り出す
print(my_list[2]) # 3

for文を使って順番に取り出す方法(よく使います)

# リストを作成
my_list = [1, 2, 3, 4, 5]

# for文を使って要素を順番に取り出す
for item in my_list:
    print(item) # 1 2 3 4 5

listとforの組み合わせは、リストの要素を一つずつ取り出して処理を行うためによく使用されます。

実例として、リストに格納されている数字を全て足し算するプログラムを考えます。

pythonCopy codenumbers = [1, 2, 3, 4, 5]

# 合計値を入れる変数を用意
total = 0

# リストの要素を一つずつ取り出し処理を行う
for num in numbers:
    # 取り出した要素を加算
    total += num

# 合計値を表示
print(total)

上記のコードでは、numbersリストに格納されている数字を順次取り出し、total変数に加算しています。最終的にtotalにはnumbersに格納されている数字の合計値が格納されます。

また、イテレータは、「要素を順に取り出して処理を行うことができるオブジェクト」のことを指します。上記のプログラムでは、numbersリストがイテレータであり、for文でnumbersから要素を取り出しています。

スライスを使う方法

スライスを使うと、listの中から特定の範囲の要素を取り出すことができます。

下記は、listからスライスを使って取り出す例です。

# リストの作成
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# スライスを使って、リストの2番目から5番目までの要素を取り出す
sliced_data = data[1:5]
print(sliced_data) # [2, 3, 4, 5]

# スライスを使って、リストの先頭から3番目までの要素を取り出す
sliced_data = data[:3]
print(sliced_data) # [1, 2, 3]

# スライスを使って、リストの4番目から最後までの要素を取り出す
sliced_data = data[3:]
print(sliced_data) # [4, 5, 6, 7, 8, 9, 10]

# スライスを使って、リストの最後から3番目までの要素を取り出す
sliced_data = data[-3:]
print(sliced_data) # [8, 9, 10]

上記のように、リスト[n:m]と書くことで、n番目からm-1番目までの要素を取り出すことができます。 n番目の指定が省略された場合は、リストの先頭から、m-1番目までの要素が取り出されます。 m番目の指定が省略された場合は、n番目から最後までの要素が取り出されます。 また、最後からのインデックスの指定には負の数を使うことができます。

イテレータを使う方法

イテレータは、要素を順に取り出すためのオブジェクトです。イテレータを使用することで、リストなどのイテラブルオブジェクトから順に要素を取り出すことができます。

Pythonには、for文を使ってイテレータを使用することができます。for文は、イテラブルオブジェクトから順に要素を取り出し、それを変数に代入します。

# リストを作成
numbers = [1, 2, 3, 4, 5]

# イテレータを使用して要素を順に取り出す
for num in numbers:
    print(num)

上記のコードでは、numbersというリストから順に要素を取り出し、numという変数に代入しています。それを使ってprint関数を呼び出しています。

イテレータには、iter()とnext()関数があります。iter()関数はイテレータを返し、next()関数はイテレータから次の要素を取り出します。

# イテレータを作成
it = iter(numbers)

# イテレータから要素を取り出す
print(next(it))    # 1
print(next(it))    # 2
print(next(it))    # 3
print(next(it))    # 4
print(next(it))    # 5

上記のように、iter()関数を使ってイテレータを作成し、next()関数を使ってイテレータから要素を取り出しています。

イテレータは、大量のデータを処理する場合に有効です。イテレータを使用すると、全ての要素を一度にメモリに読み込む必要がなくなり、処理速度が向上します。

要素とインデックス番号を同時に取り出す方法

enumerateを使うことで、要素とそのインデックス番号を同時に取り出すこともできます。

pythonCopy code# リストを作成
my_list = [1, 2, 3, 4, 5]

# enumerateを使って要素とインデックス番号を取り出す
for i, item in enumerate(my_list):
    print(i, item) # 0 1 / 1 2 / 2 3 / 3 4 / 4 5

ステップアップ編:listに内包表記を使う

リストを簡潔に作成するために、リスト内包表記を使用することがあります。

例: my_list = [x*2 for x in range(5)]

pythonでlistの内包表記(List Comprehension)とは、for文とif文を組み合わせた短く、スマートな方法で新しいリストを作成する方法です。

例えば、1から10までの数字のリストを作成したい場合、次のように書けます。

numbers = [i for i in range(1, 11)]

これは、range(1, 11)で生成される数字のイテレーションで、それぞれの要素を変数iとして、iを要素として新しいリストnumbersに格納するということを意味しています。

if文も同様に使用することができます。例えば、偶数だけのリストを作成したい場合は次のように書けます。

even_numbers = [i for i in range(1, 11) if i % 2 == 0]

これは、range(1, 11)で生成される数字のイテレーションで、それぞれの要素を変数iとして、iが偶数である場合に、iを要素として新しいリストeven_numbersに格納するということを意味しています。

内包表記は短くスマートなコードを書くことができ、可読性も高くなるので、リストを作成する際にはよく使用されます。

初学者のうちは躓くのもなんですので、自分で書く必要はないかと思います。

が、他の方のプログラムを見た時に理解できなくなるのもイヤですので、「こんなのもあるんだね」くらいで覚えておきましょう。

コメント

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