リストの基本:複数のデータをまとめて管理する#

はじめに#

これまでの記事でPythonの基本的な書き方や条件分岐、繰り返しについて学んできました。今回からは「データ構造」と呼ばれる、データを効率的に扱うための仕組みについて学んでいきます。

リストとは何か?#

多くのプログラミングでは、複数のデータをまとめて管理する必要があります。例えば、以下のようなケースを考えてみてください。

  • 商品の在庫リストを管理したい
  • ウェブサイトの訪問履歴を記録したい
  • プロジェクトの課題リストを追跡したい

Pythonでは「リスト」という機能を使って、このような複数のデータを一つの変数でまとめて管理することができます。リストは順番に並べられたデータの集まりです。

これまでの知識だと、例えば複数の商品在庫を管理する場合、それぞれの情報を別々の変数に保存する必要がありました。

>
# 商品在庫を別々の変数で管理する場合
product1 = "ノートパソコン"
product2 = "スマートフォン"
product3 = "タブレット"
product4 = "ヘッドフォン"
product5 = "スピーカー"

しかし、この方法では商品数が増えるたびに新しい変数を作る必要があり、とても大変です。リストを使えば、これらをすべて1つの変数にまとめることができます。

リストの作り方#

Pythonでリストを作るには、角括弧 [ ] を使い、その中に要素(項目)をカンマ , で区切って並べます。

>
# 商品リストを作成
products = ["ノートパソコン", "スマートフォン", "タブレット", "ヘッドフォン", "スピーカー"]
print(products)
['ノートパソコン', 'スマートフォン', 'タブレット', 'ヘッドフォン', 'スピーカー']

リストの中には、文字列だけでなく、数値や他のデータ型も入れることができます。

>
# 数字のリスト(一年間の平均気温)
monthly_temperatures = [12.5, 15.3, 18.6, 21.4, 25.8, 28.2, 30.5, 31.2, 27.5, 22.1, 17.3, 13.6]
print(monthly_temperatures)

# いろいろな種類のデータを混ぜたリスト
mixed_data = ["東京", 35.6895, 139.6917, 13.929, True]  # 都市名、緯度、経度、人口(百万)、首都かどうか
print(mixed_data)
[12.5, 15.3, 18.6, 21.4, 25.8, 28.2, 30.5, 31.2, 27.5, 22.1, 17.3, 13.6]
['東京', 35.6895, 139.6917, 13.929, True]

また、何も入れていない空のリストから始めることもできます。これは後からデータを追加していく時に便利です。

>
# 空のリスト
tasks = []
print(tasks)
[]

リストの中身を取り出す#

リストの要素(項目)を取り出すには、インデックス(添字)を使います。インデックスは0から始まることがポイントです。これはプログラミングではよくある考え方なので、少し慣れが必要かもしれません。

>
products = ["ノートパソコン", "スマートフォン", "タブレット", "ヘッドフォン", "スピーカー"]

# 最初の項目(インデックス0)を取り出す
print("1番目の商品:", products[0])

# 2番目の項目(インデックス1)を取り出す
print("2番目の商品:", products[1])

# 最後の項目(インデックス4)を取り出す
print("5番目の商品:", products[4])
1番目の商品: ノートパソコン
2番目の商品: スマートフォン
5番目の商品: スピーカー

なぜ0から始まるのでしょうか?これは多くのプログラミング言語で採用されている方法で、「最初の項目はリストの先頭から0個ずれた位置にある」という考え方です。

後ろからの数え方(負のインデックス)#

Pythonでは、リストの最後から数えて項目を取り出すこともできます。これを「負のインデックス」と呼びます。-1が最後の要素、-2がその一つ前の要素というように、後ろから数えることができるのです。

>
products = ["ノートパソコン", "スマートフォン", "タブレット", "ヘッドフォン", "スピーカー"]

# 最後の項目にアクセス
print("最後の商品:", products[-1])

# 後ろから2番目の項目にアクセス
print("後ろから2番目の商品:", products[-2])
最後の商品: スピーカー
後ろから2番目の商品: ヘッドフォン

これは「リストの個数が分からない場合」や「いつも最後の要素が欲しい場合」にとても便利な方法です。

リストの長さを調べる#

リストの中に何個の項目があるか(長さ)を知りたい時は、len() 関数を使います。

>
products = ["ノートパソコン", "スマートフォン", "タブレット", "ヘッドフォン", "スピーカー"]
print("商品数:", len(products))

monthly_temperatures = [12.5, 15.3, 18.6, 21.4, 25.8, 28.2, 30.5, 31.2, 27.5, 22.1, 17.3, 13.6]
print("データ数:", len(monthly_temperatures))
商品数: 5
データ数: 12

リスト内の要素を変更する#

リストの良いところは、作った後でも中身を変更できることです。どの項目を変更したいかインデックスで指定して、新しい値を入れることができます。

>
# やることリスト
tasks = ["買い物", "部屋の掃除", "レポート作成", "電話をかける", "料理"]
print("変更前:", tasks)

# 3番目の項目を変更
tasks[2] = "レポートを書く"
print("変更後:", tasks)

# さらに変更を加える
tasks[3] = "友達に電話"
print("さらに変更:", tasks)
変更前: ['買い物', '部屋の掃除', 'レポート作成', '電話をかける', '料理']
変更後: ['買い物', '部屋の掃除', 'レポートを書く', '電話をかける', '料理']
さらに変更: ['買い物', '部屋の掃除', 'レポートを書く', '友達に電話', '料理']

リストに項目があるかどうかを確認する#

あるものがリストに含まれているかどうかを確認するには、in というキーワードを使います。これはとても直感的で便利です。

>
features = ["カメラ機能", "防水", "顔認証", "急速充電", "無線充電"]

# 機能の有無を確認
print("防水機能はありますか?", "防水" in features)
print("指紋認証機能はありますか?", "指紋認証" in features)
防水機能はありますか? True
指紋認証機能はありますか? False

in は特にユーザーの入力チェックや条件分岐で役立ちます。

>
# 条件分岐の例
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"]

# リストの中に「バナナ」があるか確認して処理を分ける
if "バナナ" in fruits:
    print("バナナがリストに含まれています")
else:
    print("バナナはリストにありません")

# リストの長さによって処理を分ける
if len(fruits) > 3:
    print("フルーツが3つより多くあります")
elif len(fruits) == 3:
    print("フルーツがちょうど3つあります")
else:
    print("フルーツは3つ未満です")
バナナがリストに含まれています
フルーツが3つより多くあります

リストを使うときの注意点#

リストを使う時に気をつけるポイントをいくつか見ていきましょう。

存在しない位置を指定するとエラーになる#

リストの中にない位置(インデックス)を指定すると、エラーが出ます。

>
products = ["ノートパソコン", "スマートフォン", "タブレット"]
print(products[3])  # インデックス3の要素は存在しない
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-14-87ced0a8ad18> in <cell line: 0>()
      1 products = ["ノートパソコン", "スマートフォン", "タブレット"]
----> 2 print(products[3])  # インデックス3の要素は存在しない

IndexError: list index out of range

このエラーを避けるため、事前に範囲内かどうかを確認するとよいでしょう。

安全にリストの項目を取得する方法#

インデックスの範囲外エラーを防ぐため、取り出そうとする前にその位置が有効かどうかを確認するとよいでしょう。

>
products = ["ノートパソコン", "スマートフォン", "タブレット"]
index = 3

# リストの範囲内かどうかを確認してから取り出す
if 0 <= index < len(products):
    print(f"商品: {products[index]}")
else:
    print(f"インデックス {index} は範囲外です。商品数は {len(products)} です。")
インデックス 3 は範囲外です。商品数は 3 です。

まとめ#

今回は、Pythonのリストの基本について学びました。

  • リストは複数のデータをまとめて管理するための便利な道具
  • 角括弧[ ]を使って作り、要素はカンマで区切る
  • リストの位置(インデックス)は0から始まる
  • 負の数を使うと後ろから数えられる
  • len()関数でリストの長さを調べられる
  • リストの中身は後から変更できる
  • inキーワードで項目が含まれているかを確認できる

リストはPythonプログラミングの基本的なデータ構造の一つであり、多くの場面で活用されます。次回は、リストに要素を追加したり削除したりする方法について詳しく学んでいきます。