リスト(list)の使い方
リストは、複数のアイテムを一つにまとめて扱うためのデータ構造です。リストは変更可能(mutable)であり、順序があり、重複を許します。リストは[]
で囲んで作成します。
リストとは
リストは、Pythonにおけるデータ構造の1つで、複数のアイテムを順序付きで保持できる可変(mutable)なコンテナです。リスト内の要素は変更可能であり、異なる型のデータを混在させることができます。また、リストはインデックス番号を用いてアクセスします。
基本的な操作
・リストの作成:
my_list = [1, 2, 3, 4, 5]
リストmy_list
は、整数の1、2、3、4、5の5つの要素から構成されるリストです。このリストの要素に順番でアクセスできます。リストは、必要に応じて追加や削除が可能です。
・要素の追加:
my_list.append(6) # リストの末尾に追加
append()
メソッドを使うことで、リストの末尾に新しい要素(ここでは6)を追加します。この操作はリストを変更します。リスト内のデータの順番を保ちながら、新しい要素を最後に追加します。
・要素の削除:
my_list.remove(3) # 値が3の要素を削除
remove()
メソッドはリスト内の最初に出現する指定された値(ここでは3)を削除します。この操作は、リスト内の最初の一致を削除し、他の要素には影響を与えません。リスト内に指定した値が複数存在する場合でも、最初の1つだけが削除されます。
・インデックスでアクセス:
print(my_list[0]) # 最初の要素(インデックス0)
リストは0から始まるインデックスで要素にアクセスします。このコードでは、インデックス0に位置する要素(リストの最初の要素)を取得し、表示します。
・スライス:
print(my_list[1:3]) # インデックス1から2までの要素を取得
スライスを使うと、リストの一部を取得できます。この例では、インデックス1から2までの要素を取り出しています。インデックス3の要素は含まれません。
タプル(tuple)とリストの違い
タプルはリストに似ていますが、変更不可能(immutable)であるという点で異なります。
タプルとは
タプルは、リストに似たデータ構造ですが、**変更不可能(immutable)**なデータ構造です。タプル内の要素は作成後に変更できません。順序を保持しますが、要素を追加したり削除したりすることができません。変更ができないため、タプルはリストよりも高速に動作する場合があります。
主な違い
- 変更可能性:リストは変更可能(要素の追加、削除などが可能)、タプルは変更不可能。
- 表記:
- リスト:
[]
- タプル:
()
- リスト:
例:
・リスト:
my_list = [1, 2, 3]
my_list[0] = 10 # 要素を変更可能
リストは要素を変更することができます。この例では、インデックス0の要素を1から10に変更しています。リストの柔軟性を活かした変更が可能です。
・タプル:
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # エラー: タプルは変更不可
タプルは変更不可能です。このコードでは、インデックス0の要素を変更しようとするとエラーが発生します。タプルは不変なデータとして利用される場面に適しています。
辞書(dict)の操作
辞書はキーと値のペアを格納するデータ構造で、順序を持つ(Python 3.7以降)という特徴があります。
辞書とは
辞書(dict
)は、キーと値のペアを格納するデータ構造です。各キーには1つの値が対応しており、キーを使って対応する値にアクセスできます。辞書は順序を保持する(Python 3.7以降)一方で、キーは一意でなければならず、重複するキーを持つことはできません。
基本的な操作
・辞書の作成:
my_dict = {"apple": 1, "banana": 2, "cherry": 3}
この辞書は、キーが"apple"
, "banana"
, "cherry"
で、それぞれに対応する値が1、2、3です。辞書内の要素はキーによって一意に識別されます。
・値の取得:
print(my_dict["apple"]) # appleキーの値を取得
my_dict["apple"]
は、"apple"
というキーに対応する値である1を取得します。辞書はキーを用いて素早く値にアクセスできます。
・新しいキーと値の追加:
my_dict["date"] = 4 # 新しいキーと値を追加
辞書に新しいキーと値のペア(ここでは"date": 4
)を追加します。辞書は変更可能なので、後から新しい要素を簡単に追加できます。
・キーの削除:
del my_dict["banana"] # "banana"キーを削除
del
を使って、指定されたキー(この場合は"banana"
)を削除します。この操作により、そのキーと対応する値が辞書から削除されます。
・キーの存在確認:
if "apple" in my_dict:
print("Apple exists")
in
演算子を使うと、指定したキーが辞書に存在するかどうかを確認できます。このコードでは、"apple"
が辞書に存在する場合にメッセージを表示します。
集合(set)の活用
集合は重複を許さず、順序がないデータ構造です。数学的な集合に近い操作が可能です。
集合とは
集合(set
)は、順序なしで重複を許さないデータ構造です。集合は、数学の集合と同様に、重複した要素を持つことなく、ユニークなアイテムのコレクションを格納します。集合は、集合演算(和、積、差)をサポートしています。
基本的な操作
・集合の作成:
my_set = {1, 2, 3, 4, 5}
my_set
は、整数1から5までの要素を持つ集合です。集合は順序を保持せず、同じ値の要素は重複して格納されません。
・要素の追加:
my_set.add(6) # 要素を追加
add()
メソッドを使って、集合に新しい要素(ここでは6)を追加します。集合に既に同じ値が含まれている場合、その値は追加されません。
・要素の削除:
my_set.remove(4) # 要素4を削除
remove()
メソッドを使用して、集合から特定の要素を削除します。この場合、4
が集合から削除されます。要素が存在しない場合はエラーが発生します。
・集合の演算(和、差、積など):
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union = set1 | set2 # 和集合
intersection = set1 & set2 # 積集合
difference = set1 - set2 # 差集合
- 和集合(
|
):2つの集合の要素をすべて結合し、重複を排除します。 - 積集合(
&
):2つの集合に共通する要素を抽出します。 - 差集合(
-
):集合1に含まれ、集合2に含まれない要素を抽出します。
リスト内包表記
リスト内包表記(list comprehension)は、リストを簡潔に生成するための方法です。通常のfor
ループを1行で書くことができます。
リスト内包表記とは
リスト内包表記(list comprehension)は、既存のリストや他の反復可能なオブジェクトから新しいリストを生成するための簡潔な方法です。通常のfor
ループを使ってリストを作成するよりも、短く効率的に記述することができます。
基本的な構文:
リスト内包表記の基本的な構文は次のようになります。
[expression for item in iterable if condition]
ここでの各部分は次の意味を持っています:
- expression:リストの各要素を作成するための式です。この部分はリストに追加される値を決定します。
- item:反復可能オブジェクト(
iterable
)の各要素を順番に取得するための変数です。 - iterable:リストやタプル、文字列など、反復可能なオブジェクトです。
item
はこのオブジェクトの各要素を1つずつ受け取ります。 - if condition(オプション):条件式で、
iterable
から要素を選択するためのフィルターです。condition
がTrue
の場合のみ、そのitem
がリストに追加されます。この部分は省略可能で、条件なしで全ての要素をリストに追加することもできます。
例:
・1から10までの平方数をリストに格納:
squares = [x**2 for x in range(1, 11)]
このコードでは、1から10までの数の平方を計算し、それらの結果をリストsquares
に格納しています。リスト内包表記を使うことで、ループとリストの生成を1行で書けます。
・偶数のみを抽出:
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
このリスト内包表記は、1から10までの数のうち、偶数のみを抽出してリストに格納します。条件式(if x % 2 == 0
)を使って、偶数だけを選択しています。
リスト内包表記を使用することで、コードをより簡潔かつ効率的に書けます。
以上、データ構造についての説明でした。次の章では、関数とモジュールについて学んでいきましょう!