第3章: Pythonを使いこなす:リスト、タプル、辞書、セット

Pythonのプログラミングにおいて、データを効率的に扱う能力は非常に重要です。この章では、Pythonに組み込まれている強力なコレクション(データ構造)であるリストタプル辞書セットを学びます。これらのデータ構造は、他の言語における配列、ハッシュマップ、集合などと似ていますが、Pythonならではの便利な特性やメソッドを持っています。これらを理解し、使いこなすことが「Pythonらしい」コードを書くための第一歩です。

リスト (List):ミュータブルなシーケンス

リストは、複数の要素を順序付けて格納できるコレクションです。他の言語における「動的配列」に最も近い存在です。

  • ミュータブル (Mutable): 作成後に要素の追加、変更、削除が可能です。
  • 順序あり (Ordered): 要素は格納された順序を保持します。
  • 多様な要素: 数値、文字列、さらには他のリストなど、異なるデータ型の要素を混在させることができます。

基本的な使い方 (REPL実行例)

リストは非常に柔軟性が高く、Pythonで最も頻繁に使われるデータ構造の一つです。

タプル (Tuple):イミュータブルなシーケンス

タプルはリストと非常によく似ていますが、最大の違いはイミュータブル (Immutable)、つまり一度作成したら変更できない点です。

  • イミュータブル (Immutable): 要素の変更、追加、削除はできません。
  • 順序あり (Ordered): リスト同様、順序を保持します。

なぜタプルを使うのか? 🤔

  1. 安全なデータ: 変更されたくないデータを安全に保持できます(例: 関数の引数、定数セット)。
  2. パフォーマンス: 一般的にリストよりわずかに高速で、メモリ効率が良いとされています。
  3. 辞書のキーとして使用可能: ミュータブルなリストは辞書のキーになれませんが、イミュータブルなタプルはキーとして使えます。

基本的な使い方 (REPL実行例)

辞書 (Dictionary):キーと値のペア

辞書は、他の言語のハッシュマップ連想配列に相当します。順序ではなく、一意な「キー」を使って「値」にアクセスします。

  • キーと値のペア: key: value の形式でデータを格納します。
  • 一意なキー: キーは辞書内で重複してはいけません。
  • 順序: Python 3.7以降では、要素が追加された順序が保持されます。
  • ミュータブル: 要素の追加、変更、削除が可能です。

基本的な使い方 (REPL実行例)

セット (Set):ユニークな要素のコレクション

セットは、順序がなく、重複した要素を持たないコレクションです。数学の「集合」の概念に近く、和集合や積集合といった集合演算を高速に行えます。

  • ユニークな要素: 同じ要素を複数含めることはできません。
  • 順序なし (Unordered): 要素の格納順は保証されません。
  • ミュータブル: 要素の追加、削除は可能です。

使いどころ

  • リストなどから重複した要素を効率的に削除したい場合。
  • 二つのコレクションに共通する要素(積集合)や、全ての要素(和集合)を求めたい場合。

基本的な使い方 (REPL実行例)

スライシングによる部分的な要素の取得

スライシングは、リストやタプルのようなシーケンスから、部分的な要素を効率的に取り出すための非常に強力な機能です。構文は [start:stop:step] です。

REPL実行例

内包表記 (Comprehensions)による効率的な生成

内包表記は、既存のイテラブルから新しいリスト、辞書、セットを簡潔かつ効率的に生成するためのPythonらしい構文です。forループを使うよりも短く、可読性が高いコードを書くことができます。

リスト内包表記

forループで書く場合と、リスト内包表記で書く場合を比較してみましょう。

辞書内包表記

セット内包表記

この章のまとめ

この章では、Pythonでデータを扱うための基本的な4つのコレクションを学びました。それぞれの特性を理解し、状況に応じて適切に使い分けることが重要です。

データ構造構文例変更可能性順序重複主な用途
リスト (List)[1, 'a', 2]可能 (ミュータブル)あり許可順序があり、変更が必要な要素の集まり。
タプル (Tuple)(1, 'a', 2)不可能 (イミュータブル)あり許可変更しない(させたくない)データの集まり、辞書のキー。
辞書 (Dictionary){'key': 'value'}可能 (ミュータブル)あり (Python 3.7+)キーは不許可キーと値のペアでデータを管理。
セット (Set){1, 'a', 2}可能 (ミュータブル)なし不許可重複を除き、要素の存在確認や集合演算を高速に行う。

加えて、スライシングを使えばシーケンス(リストやタプル)から部分的な要素を柔軟に取得でき、内包表記を利用すれば、これらのコレクションを一行で効率的かつPythonらしく生成できます。これらのツールは、あなたのコードをより簡潔で強力なものにしてくれるでしょう。

練習問題1: 商品のフィルタリング

ある店舗の商品のリストがあります。このリストから、価格が500円以上の商品だけを抽出し、その名前だけを新しいリストに格納してください。

ヒント: リスト内包表記と、辞書の値にアクセスする方法 (product['price']) を組み合わせ、if 条件を追加してみましょう。

practice3_1.py
python practice3_1.py

練習問題2: クラブ活動のメンバー分析

2つのクラブ活動、「数学クラブ」と「科学クラブ」のメンバーリストがあります。セット(集合)の機能を使って、以下のメンバーリストを作成してください。

a. 両方のクラブに所属しているメンバー b. 少なくともどちらか一方のクラブに所属している全メンバー c. 数学クラブにのみ所属しているメンバー

ヒント: セットの積集合 (&)、和集合 (|)、差集合 (-) 演算子を使います。

practice3_2.py
python practice3_2.py