📋 ステップ7: リスト(配列)の基礎
複数のデータをまとめて扱おう
プログラミングでは、複数のデータをまとめて管理することがよくあります。このステップでは、Pythonで最もよく使うデータ構造「リスト」について学びます。
📖 このステップで学ぶこと
・リストとは何か、なぜ使うのか
・リストの作り方と要素へのアクセス方法
・要素の追加・削除・変更の方法
・リストのスライス(一部を切り出す)
・よく使うリストのメソッド
・実践的なリストの活用例
📝 1. リストとは何か?
まず、リストとは何か、なぜ必要なのかを理解しましょう。
🔰 リストを使わない場合の問題
例えば、5人の学生のテストの点数を管理したいとします。リストを使わない場合、こうなります:
コード:変数を5つ作る(非効率)
# 5人分の点数を別々の変数で管理
score1 = 85
score2 = 92
score3 = 78
score4 = 88
score5 = 95
# 合計を計算するのも大変…
total = score1 + score2 + score3 + score4 + score5
print(f"合計: {total}点")
⚠️ この方法の問題点
・変数が増えると管理が大変(100人分だと変数100個!)
・「全員の平均を出す」などの処理が面倒
・後から人数が増えるとコードの修正が必要
🔰 リストを使うとスッキリ!
リストを使うと、複数のデータを1つの変数にまとめて管理できます。
コード:リストを使う(効率的)
# 5人分の点数を1つのリストで管理
scores = [85, 92, 78, 88, 95]
# 合計も簡単に計算できる
total = sum(scores)
print(f"合計: {total}点")
実行結果
合計: 438点
💡 リストのイメージ
リストは「番号付きの箱」のようなものです。
1つの箱の中に、複数のデータを順番に並べて入れておけます。
各データには「番号(インデックス)」が付いていて、番号を指定して取り出せます。
📘 リストの基本的な特徴
| 特徴 | 説明 |
| 角カッコ [ ] で囲む | リストは [ ] で作ります |
| カンマ , で区切る | 要素はカンマで区切ります |
| 順番がある | データは入れた順番で保存されます |
| 変更できる | 後から要素の追加・削除・変更ができます |
| 異なる型も入れられる | 文字列、数値、真偽値を混在できます |
📝 リストの作り方
いくつかの方法でリストを作ることができます。
コード:様々なリストの作り方
# 文字列のリスト
fruits = ["りんご", "バナナ", "オレンジ"]
print(fruits)
# 数値のリスト
numbers = [1, 2, 3, 4, 5]
print(numbers)
# 空のリスト(後から要素を追加する場合に使う)
empty_list = []
print(empty_list)
# 異なる型を混在させたリスト
mixed = ["太郎", 25, 175.5, True]
print(mixed)
実行結果
['りんご', 'バナナ', 'オレンジ'] [1, 2, 3, 4, 5] [] ['太郎', 25, 175.5, True]
💡 コードの解説
・fruits = ["りんご", "バナナ", "オレンジ"]
→ 文字列を3つ入れたリストを作り、変数fruitsに代入
・empty_list = []
→ 空のリストを作成。後からappend()で要素を追加できます
・mixed = ["太郎", 25, 175.5, True]
→ 文字列、整数、小数、真偽値を混在させることも可能
🔍 2. リストの要素にアクセスする
リストに入れたデータを取り出すには「インデックス(番号)」を使います。
🔰 インデックスとは?
リストの各要素には、自動的に番号が付けられます。この番号をインデックスと呼びます。
⚠️ 超重要:インデックスは0から始まる!
プログラミングでは、番号は1からではなく0から始まります。
これは最初は戸惑いますが、慣れれば自然になります。
📌 インデックスの仕組み
リスト: [“りんご”, “バナナ”, “オレンジ”, “ぶどう”, “メロン”]
| 要素 | りんご | バナナ | オレンジ | ぶどう | メロン |
| 正のインデックス | 0 | 1 | 2 | 3 | 4 |
| 負のインデックス | -5 | -4 | -3 | -2 | -1 |
📝 インデックスで要素を取得する
リスト[インデックス]と書くと、指定した位置の要素を取得できます。
コード:正のインデックスで取得
# リストを作成
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"]
# インデックス0(最初の要素)を取得
print(fruits[0])
# インデックス1(2番目の要素)を取得
print(fruits[1])
# インデックス4(5番目の要素)を取得
print(fruits[4])
実行結果
りんご バナナ メロン
📝 負のインデックスで後ろから取得
負の数を使うと、後ろから数えて要素を取得できます。
コード:負のインデックスで取得
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"]
# インデックス-1(最後の要素)を取得
print(fruits[-1])
# インデックス-2(後ろから2番目)を取得
print(fruits[-2])
# インデックス-5(後ろから5番目=最初)を取得
print(fruits[-5])
実行結果
メロン ぶどう りんご
💡 負のインデックスの便利さ
「最後の要素」を取得したいとき、リストの長さを知らなくても [-1] で取得できます。
これはとても便利で、実務でもよく使います。
📝 リストの長さを取得する – len()関数
len()関数を使うと、リストの要素数(長さ)を取得できます。
コード:リストの長さを取得
fruits = ["りんご", "バナナ", "オレンジ"]
# len()でリストの要素数を取得
length = len(fruits)
print(f"要素数: {length}")
# 最後の要素にアクセスする方法(2つ)
# 方法1: 負のインデックス(おすすめ)
print(fruits[-1])
# 方法2: len() - 1 を使う
print(fruits[len(fruits) - 1])
実行結果
要素数: 3 オレンジ オレンジ
💡 コードの解説
・len(fruits) → リストの要素数(3)を返す
・fruits[-1] → 最後の要素を直接取得(シンプルでおすすめ)
・fruits[len(fruits) - 1] → len()は3を返すので、fruits[3-1]=fruits[2]となり最後の要素を取得
⚠️ インデックスの範囲外エラー
存在しないインデックスを指定すると、エラーになります。
❌ エラーになる例
fruits = ["りんご", "バナナ", "オレンジ"] # 要素数は3
# インデックス3は存在しない(0, 1, 2 しかない)
# print(fruits[3]) # IndexError: list index out of range
# インデックス-4も存在しない
# print(fruits[-4]) # IndexError: list index out of range
このエラーを防ぐには、アクセス前に len() で長さを確認するか、[-1] のような安全な方法を使いましょう。
➕ 3. リストへの要素の追加
リストは作成後に要素を追加できます。追加方法は3つあります。
📘 追加方法の比較
| メソッド | 機能 | 使用例 |
| append() | 末尾に1つ追加 | list.append(“新しい要素”) |
| insert() | 指定位置に挿入 | list.insert(1, “要素”) |
| extend() | 複数の要素をまとめて追加 | list.extend([1, 2, 3]) |
📝 append() – 末尾に1つ追加する
append()は最もよく使う追加方法です。リストの最後に要素を1つ追加します。
💡 append()とは?
「append」は「追加する、付け加える」という意味の英語です。
リストの末尾に新しい要素を1つ追加します。
コード:append()で追加
# 最初は2つの要素を持つリスト
fruits = ["りんご", "バナナ"]
print(f"最初: {fruits}")
# append()で末尾に追加
# fruits.append("オレンジ") は「fruitsの末尾にオレンジを追加する」という意味
fruits.append("オレンジ")
print(f"追加後: {fruits}")
# さらに追加
fruits.append("ぶどう")
print(f"追加後: {fruits}")
実行結果
最初: ['りんご', 'バナナ'] 追加後: ['りんご', 'バナナ', 'オレンジ'] 追加後: ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
📝 insert() – 指定位置に挿入する
insert(位置, 値)を使うと、好きな位置に要素を挿入できます。
💡 insert()の書き方
リスト.insert(挿入位置のインデックス, 挿入する値)
指定した位置に要素が入り、それ以降の要素は後ろにずれます。
コード:insert()で挿入
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"最初: {fruits}")
# インデックス1の位置(バナナの前)に「いちご」を挿入
# insert(1, "いちご") は「位置1にいちごを入れる」という意味
fruits.insert(1, "いちご")
print(f"挿入後: {fruits}")
# インデックス0(先頭)に「メロン」を挿入
fruits.insert(0, "メロン")
print(f"先頭挿入: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ'] 挿入後: ['りんご', 'いちご', 'バナナ', 'オレンジ'] 先頭挿入: ['メロン', 'りんご', 'いちご', 'バナナ', 'オレンジ']
📝 extend() – 複数の要素をまとめて追加
extend()は、別のリストの要素をまとめて追加します。
💡 extend()とは?
「extend」は「拡張する」という意味の英語です。
リストを拡張して、別のリストの要素を全て追加します。
コード:extend()で複数追加
fruits = ["りんご", "バナナ"]
new_fruits = ["オレンジ", "ぶどう", "メロン"]
# extend()で複数の要素を一度に追加
# new_fruitsの中身が全てfruitsに追加される
fruits.extend(new_fruits)
print(fruits)
実行結果
['りんご', 'バナナ', 'オレンジ', 'ぶどう', 'メロン']
⚠️ append()とextend()の違い(重要!)
この2つは混同しやすいので、違いをしっかり理解しましょう。
コード:append()とextend()の違い
# append()の場合
list1 = [1, 2, 3]
list1.append([4, 5]) # リスト[4, 5]を「1つの要素」として追加
print(f"append: {list1}")
# extend()の場合
list2 = [1, 2, 3]
list2.extend([4, 5]) # リスト[4, 5]の「中身」を個別に追加
print(f"extend: {list2}")
実行結果
append: [1, 2, 3, [4, 5]] extend: [1, 2, 3, 4, 5]
📌 違いのまとめ
| メソッド | 動作 | 結果 |
| append([4, 5]) | [4, 5]を1つの要素として追加 | [1, 2, 3, [4, 5]] |
| extend([4, 5]) | 4と5を個別に追加 | [1, 2, 3, 4, 5] |
📝 + 演算子でリストを結合
+演算子を使ってリストを結合することもできます。
コード:+演算子でリスト結合
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# +で結合(新しいリストを作成)
combined = list1 + list2
print(f"結合: {combined}")
# 元のリストは変わらない
print(f"list1: {list1}")
print(f"list2: {list2}")
実行結果
結合: [1, 2, 3, 4, 5, 6] list1: [1, 2, 3] list2: [4, 5, 6]
💡 extend()と+の違い
・extend() → 元のリストを直接変更する
・+ → 新しいリストを作成する(元のリストは変わらない)
🗑️ 4. リストからの要素の削除
リストから要素を削除する方法もいくつかあります。状況に応じて使い分けましょう。
📘 削除方法の比較
| 方法 | 機能 | 使用例 |
| remove() | 値を指定して削除 | list.remove(“バナナ”) |
| pop() | 位置を指定して削除(値を返す) | list.pop(1) |
| del文 | 位置を指定して削除 | del list[1] |
| clear() | 全要素を削除 | list.clear() |
📝 remove() – 値を指定して削除
remove()は、削除したい値を指定します。最初に見つかった1つだけを削除します。
💡 remove()の特徴
・削除したい「値」を指定する(インデックスではない)
・同じ値が複数あっても、最初の1つだけを削除
・値が見つからないとエラーになる
コード:remove()で削除
# 「バナナ」が2つあるリスト
fruits = ["りんご", "バナナ", "オレンジ", "バナナ"]
print(f"最初: {fruits}")
# remove("バナナ") で「バナナ」を削除
# 最初に見つかった1つだけが削除される
fruits.remove("バナナ")
print(f"削除後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ', 'バナナ'] 削除後: ['りんご', 'オレンジ', 'バナナ']
※最初の「バナナ」(インデックス1)だけが削除され、2番目の「バナナ」は残っています。
📝 pop() – 位置を指定して削除(値も取得)
pop()は、インデックスを指定して削除します。削除した値を返すのが特徴です。
💡 pop()の特徴
・削除したい「位置(インデックス)」を指定する
・削除した値を返す(変数に保存できる)
・引数なしで呼び出すと、最後の要素を削除
コード:pop()で削除
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
print(f"最初: {fruits}")
# pop() - 引数なしで最後の要素を削除
# 削除した値を変数lastに保存
last = fruits.pop()
print(f"削除した要素: {last}")
print(f"削除後: {fruits}")
# pop(1) - インデックス1の要素を削除
second = fruits.pop(1)
print(f"削除した要素: {second}")
print(f"削除後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ', 'ぶどう'] 削除した要素: ぶどう 削除後: ['りんご', 'バナナ', 'オレンジ'] 削除した要素: バナナ 削除後: ['りんご', 'オレンジ']
💡 pop()はいつ使う?
削除した値を使いたい場合に便利です。例えば:
・「カートから商品を削除して、その商品名を表示する」
・「待ち行列から次の人を取り出して処理する」
📝 del文 – 位置を指定して削除
del文でも、インデックスを指定して要素を削除できます。
コード:del文で削除
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
print(f"最初: {fruits}")
# del でインデックス2の要素を削除
del fruits[2]
print(f"削除後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ', 'ぶどう'] 削除後: ['りんご', 'バナナ', 'ぶどう']
📌 pop()とdelの違い
| 方法 | 削除した値 | 使いどころ |
| pop() | 返す(取得できる) | 削除した値を使いたい時 |
| del | 返さない | 単に削除したい時 |
📝 clear() – 全ての要素を削除
clear()は、リストの全要素を削除して空にします。
コード:clear()で全削除
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"最初: {fruits}")
# clear()で全要素を削除
fruits.clear()
print(f"削除後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ'] 削除後: []
✏️ 5. リストの要素の変更
リストの要素は、インデックスを指定して直接変更できます。
📝 インデックスで値を変更
コード:要素の変更
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"最初: {fruits}")
# インデックス1の要素を「いちご」に変更
# fruits[1] は「バナナ」を指している
# それを「いちご」で上書きする
fruits[1] = "いちご"
print(f"変更後: {fruits}")
# 負のインデックスでも変更できる
# fruits[-1] は最後の要素「オレンジ」
fruits[-1] = "メロン"
print(f"変更後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ'] 変更後: ['りんご', 'いちご', 'オレンジ'] 変更後: ['りんご', 'いちご', 'メロン']
💡 変更の仕組み
リスト[インデックス] = 新しい値
この書き方で、指定した位置の値を新しい値で上書きします。
✂️ 6. リストのスライス
文字列のステップで学んだ「スライス」は、リストでも使えます。リストの一部を切り出すことができます。
🔰 スライスの基本
💡 スライスの書き方
リスト[開始:終了] → 開始から終了の手前までを切り出す
リスト[開始:終了:ステップ] → ステップ間隔で切り出す
コード:基本的なスライス
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [2:5] - インデックス2から5の手前まで
print(numbers[2:5])
# [:4] - 最初からインデックス4の手前まで
print(numbers[:4])
# [6:] - インデックス6から最後まで
print(numbers[6:])
# [:] - 全体をコピー
print(numbers[:])
実行結果
[2, 3, 4] [0, 1, 2, 3] [6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
📌 スライスの図解
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
| スライス | 意味 | 結果 |
| [2:5] | インデックス2, 3, 4を取得 | [2, 3, 4] |
| [:4] | 最初から4の手前まで(0, 1, 2, 3) | [0, 1, 2, 3] |
| [6:] | 6から最後まで(6, 7, 8, 9) | [6, 7, 8, 9] |
| [:] | 全体(コピーを作成) | [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
📝 ステップを使ったスライス
3つ目の数値(ステップ)を指定すると、間隔を空けて要素を取得できます。
コード:ステップ付きスライス
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [::2] - 2個おきに取得(偶数インデックス)
print(numbers[::2])
# [1::2] - インデックス1から2個おきに(奇数インデックス)
print(numbers[1::2])
# [::-1] - 逆順に取得
print(numbers[::-1])
実行結果
[0, 2, 4, 6, 8] [1, 3, 5, 7, 9] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
💡 [::-1]で逆順にする
[::-1]は、リストを逆順にするテクニックとしてよく使われます。
ステップが-1なので、後ろから前に向かって1つずつ取得します。
📝 スライスの実用例
コード:実用的なスライス
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン", "いちご"]
# 最初の3つを取得
print(f"最初の3つ: {fruits[:3]}")
# 最後の2つを取得
print(f"最後の2つ: {fruits[-2:]}")
# 2番目から4番目まで(インデックス1, 2, 3)
print(f"真ん中: {fruits[1:4]}")
# 1つおきに取得
print(f"1つおき: {fruits[::2]}")
実行結果
最初の3つ: ['りんご', 'バナナ', 'オレンジ'] 最後の2つ: ['メロン', 'いちご'] 真ん中: ['バナナ', 'オレンジ', 'ぶどう'] 1つおき: ['りんご', 'オレンジ', 'メロン']
⚠️ スライスの重要なポイント
スライスは新しいリストを作成します。元のリストは変更されません。
これは、リストの一部だけを使いたい時に便利です。
🔧 7. よく使うリストのメソッド
リストには便利なメソッド(機能)がたくさんあります。よく使うものを覚えましょう。
📘 主要なメソッド一覧
| メソッド | 機能 | 例 |
| in演算子 | 要素が含まれているか確認 | “A” in list |
| index() | 要素の位置を検索 | list.index(“A”) |
| count() | 要素の出現回数を数える | list.count(“A”) |
| sort() | リストを並び替え | list.sort() |
| reverse() | リストを逆順に | list.reverse() |
| copy() | リストをコピー | list.copy() |
📝 要素の検索 – in演算子
in演算子を使うと、要素がリストに含まれているかを確認できます。
コード:in演算子で検索
fruits = ["りんご", "バナナ", "オレンジ", "バナナ"]
# 「バナナ」がリストに含まれているか?
# 結果は True または False
print("バナナ" in fruits)
# 「メロン」がリストに含まれているか?
print("メロン" in fruits)
# if文と組み合わせて使う
if "バナナ" in fruits:
print("バナナはリストに含まれています")
else:
print("バナナはリストに含まれていません")
実行結果
True False バナナはリストに含まれています
📝 要素の位置を検索 – index()
index()は、指定した値が最初に見つかる位置(インデックス)を返します。
コード:index()で位置を検索
fruits = ["りんご", "バナナ", "オレンジ", "バナナ"]
# 「バナナ」が最初に現れる位置を検索
# index()は最初に見つかった位置だけを返す
position = fruits.index("バナナ")
print(f"バナナの位置: {position}")
実行結果
バナナの位置: 1
⚠️ 注意
存在しない値でindex()を使うとエラーになります。
事前にinで存在確認してから使うと安全です。
📝 要素の出現回数 – count()
count()は、指定した値がリストに何回現れるかを数えます。
コード:count()で出現回数を数える
fruits = ["りんご", "バナナ", "オレンジ", "バナナ"]
# 「バナナ」が何回出現するか
count = fruits.count("バナナ")
print(f"バナナの数: {count}個")
# 存在しない値は0回
count2 = fruits.count("メロン")
print(f"メロンの数: {count2}個")
実行結果
バナナの数: 2個 メロンの数: 0個
📝 リストの並び替え – sort()
sort()は、リストの要素を順番に並び替えます。
💡 sort()の特徴
・元のリスト自体を変更する(新しいリストは作らない)
・デフォルトは昇順(小さい→大きい)
・reverse=Trueを指定すると降順(大きい→小さい)
コード:sort()で並び替え
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# sort() - 昇順に並び替え(元のリストを変更)
numbers.sort()
print(f"昇順: {numbers}")
# sort(reverse=True) - 降順に並び替え
numbers.sort(reverse=True)
print(f"降順: {numbers}")
実行結果
昇順: [1, 1, 2, 3, 4, 5, 6, 9] 降順: [9, 6, 5, 4, 3, 2, 1, 1]
📝 sorted()関数 – 新しいリストを返す
元のリストを変えずに、並び替えた新しいリストを作りたい場合はsorted()関数を使います。
コード:sorted()で新しいリストを作成
numbers = [3, 1, 4, 1, 5]
# sorted() - 新しいリストを返す(元のリストは変わらない)
sorted_numbers = sorted(numbers)
print(f"元のリスト: {numbers}")
print(f"ソート済み: {sorted_numbers}")
実行結果
元のリスト: [3, 1, 4, 1, 5] ソート済み: [1, 1, 3, 4, 5]
📌 sort()とsorted()の違い
| 方法 | 元のリスト | 戻り値 |
| list.sort() | 変更される | なし(None) |
| sorted(list) | 変更されない | 新しいリスト |
📝 リストの反転 – reverse()
reverse()は、リストの順番を逆にします。
コード:reverse()で反転
fruits = ["りんご", "バナナ", "オレンジ"]
# reverse() - 元のリストを反転
fruits.reverse()
print(f"反転後: {fruits}")
# スライスでも反転できる(新しいリストを作成)
letters = ["A", "B", "C", "D", "E"]
reversed_letters = letters[::-1]
print(f"元のリスト: {letters}")
print(f"反転コピー: {reversed_letters}")
実行結果
反転後: ['オレンジ', 'バナナ', 'りんご'] 元のリスト: ['A', 'B', 'C', 'D', 'E'] 反転コピー: ['E', 'D', 'C', 'B', 'A']
⚠️ 超重要:リストのコピー
リストをコピーする時は注意が必要です。間違った方法だと思わぬバグの原因になります。
❌ 間違ったコピー方法
# = で代入すると、同じリストを指す「参照」になる
list1 = [1, 2, 3]
list2 = list1 # これはコピーではない!
# list2を変更すると…
list2.append(4)
# list1も変わってしまう!
print(f"list1: {list1}")
print(f"list2: {list2}")
実行結果
list1: [1, 2, 3, 4] list2: [1, 2, 3, 4]
list1も[1, 2, 3, 4]になってしまいました!
💡 なぜこうなる?
list2 = list1は、list1とlist2が「同じリスト」を指すようになります。
2つの変数が同じデータを共有しているので、片方を変更するともう片方も変わります。
✅ 正しいコピー方法
# 方法1: copy()メソッドを使う
list1 = [1, 2, 3]
list2 = list1.copy() # 新しいリストを作成
list2.append(4)
print(f"list1: {list1}") # list1は変わらない!
print(f"list2: {list2}")
# 方法2: スライス[:]を使う
list3 = [1, 2, 3]
list4 = list3[:] # 全体のスライス = 新しいリスト
list4.append(4)
print(f"list3: {list3}") # list3は変わらない!
print(f"list4: {list4}")
実行結果
list1: [1, 2, 3] list2: [1, 2, 3, 4] list3: [1, 2, 3] list4: [1, 2, 3, 4]
🎯 8. リストの実践例
ここまで学んだことを使って、実用的なプログラムを作ってみましょう。
例1: 成績の管理と分析
コード:成績の分析
# 5科目のテストの点数
scores = [85, 92, 78, 88, 95]
# sum() - リストの合計を計算
total = sum(scores)
print(f"合計点: {total}点")
# len() - 要素数を取得して平均を計算
average = total / len(scores)
print(f"平均点: {average}点")
# max() - 最大値を取得
print(f"最高点: {max(scores)}点")
# min() - 最小値を取得
print(f"最低点: {min(scores)}点")
実行結果
合計点: 438点 平均点: 87.6点 最高点: 95点 最低点: 78点
💡 使用した組み込み関数
・sum(list) → リストの要素の合計を返す
・max(list) → リストの最大値を返す
・min(list) → リストの最小値を返す
・len(list) → リストの要素数を返す
例2: ショッピングリストの管理
コード:買い物リスト
# 空のリストから始める
shopping_list = []
# 商品を追加(append)
shopping_list.append("牛乳")
shopping_list.append("パン")
shopping_list.append("卵")
print(f"買い物リスト: {shopping_list}")
# リストに含まれているか確認(in)
if "パン" in shopping_list:
print("パンはリストにあります")
# 商品を購入したら削除(remove)
shopping_list.remove("パン")
print(f"パン購入後: {shopping_list}")
# 残りの商品数(len)
print(f"残り: {len(shopping_list)}個")
実行結果
買い物リスト: ['牛乳', 'パン', '卵'] パンはリストにあります パン購入後: ['牛乳', '卵'] 残り: 2個
例3: 数値データの処理
コード:偶数だけを抽出
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 偶数だけを新しいリストに入れる
even_numbers = []
# forループで各要素をチェック
for num in numbers:
# 2で割った余りが0なら偶数
if num % 2 == 0:
even_numbers.append(num)
print(f"元のリスト: {numbers}")
print(f"偶数だけ: {even_numbers}")
実行結果
元のリスト: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 偶数だけ: [2, 4, 6, 8, 10]
💡 コードの解説
1. 空のリストeven_numbersを用意
2. for num in numbers:でリストの各要素を順番に処理
3. if num % 2 == 0:で偶数かどうか判定
4. 偶数ならappend()で新しいリストに追加
例4: ランキングの作成
コード:点数でランキング
# 名前と点数のペアをリストで管理
students = [
["田中", 85],
["鈴木", 92],
["佐藤", 78],
["高橋", 95],
["伊藤", 88]
]
# 点数(各要素の[1]番目)で降順にソート
# key=lambda x: x[1] は「x[1](点数)を基準にする」という意味
students.sort(key=lambda x: x[1], reverse=True)
# ランキングを表示
print("【成績ランキング】")
for i, student in enumerate(students, 1):
name = student[0]
score = student[1]
print(f"{i}位: {name}さん - {score}点")
実行結果
【成績ランキング】 1位: 高橋さん - 95点 2位: 鈴木さん - 92点 3位: 伊藤さん - 88点 4位: 田中さん - 85点 5位: 佐藤さん - 78点
💡 発展的な内容
この例では「リストの中にリストを入れる」という2次元リストを使っています。
lambdaやenumerateは少し難しいので、今は「こういうこともできる」と知っておくだけでOKです。
📝 練習問題(15問)
ここまで学んだことを実際に手を動かして確認しましょう。
問題1:リストの作成(初級)
📋 問題
好きな果物を3つ以上含むリストを作成し、表示してください。
解答を見る
コード
# リストは [] で作り、要素は , で区切る
fruits = ["りんご", "バナナ", "いちご"]
print(fruits)
実行結果
['りんご', 'バナナ', 'いちご']
問題2:要素へのアクセス(初級)
📋 問題
リスト colors = ["赤", "青", "緑", "黄", "紫"] から、最初の要素と最後の要素を表示してください。
解答を見る
コード
colors = ["赤", "青", "緑", "黄", "紫"]
# インデックス0が最初の要素
print(f"最初の要素: {colors[0]}")
# インデックス-1が最後の要素
print(f"最後の要素: {colors[-1]}")
実行結果
最初の要素: 赤 最後の要素: 紫
問題3:要素の追加(初級)
📋 問題
空のリストを作成し、append()を使って 1、2、3、4、5 を順番に追加してください。
解答を見る
コード
# 空のリストを作成
numbers = []
print(f"最初: {numbers}")
# append()で1つずつ末尾に追加
numbers.append(1)
numbers.append(2)
numbers.append(3)
numbers.append(4)
numbers.append(5)
print(f"追加後: {numbers}")
実行結果
最初: [] 追加後: [1, 2, 3, 4, 5]
問題4:リストの長さ(初級)
📋 問題
リスト animals = ["犬", "猫", "鳥", "魚", "うさぎ"] の要素数を表示してください。
解答を見る
コード
animals = ["犬", "猫", "鳥", "魚", "うさぎ"]
# len()でリストの要素数を取得
count = len(animals)
print(f"要素数: {count}")
実行結果
要素数: 5
問題5:要素の削除(初級)
📋 問題
リスト numbers = [10, 20, 30, 40, 50] から、remove()を使って30を削除してください。
解答を見る
コード
numbers = [10, 20, 30, 40, 50]
print(f"最初: {numbers}")
# remove()で値「30」を削除
numbers.remove(30)
print(f"削除後: {numbers}")
実行結果
最初: [10, 20, 30, 40, 50] 削除後: [10, 20, 40, 50]
問題6:要素の変更(中級)
📋 問題
リスト fruits = ["りんご", "バナナ", "オレンジ"] の2番目の要素(バナナ)を「いちご」に変更してください。
解答を見る
コード
fruits = ["りんご", "バナナ", "オレンジ"]
print(f"最初: {fruits}")
# インデックス1(2番目)の値を変更
fruits[1] = "いちご"
print(f"変更後: {fruits}")
実行結果
最初: ['りんご', 'バナナ', 'オレンジ'] 変更後: ['りんご', 'いちご', 'オレンジ']
問題7:スライスの練習(中級)
📋 問題
リスト numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] から、3番目から7番目の手前までを取り出してください。
解答を見る
コード
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [3:7] でインデックス3から7の手前まで
result = numbers[3:7]
print(result)
実行結果
[3, 4, 5, 6]
問題8:リストの反転(中級)
📋 問題
リスト letters = ["A", "B", "C", "D", "E"] を逆順にして表示してください(2つの方法で)。
解答を見る
コード
letters = ["A", "B", "C", "D", "E"]
# 方法1: reverse()メソッド(元のリストを変更)
letters_copy1 = letters.copy() # コピーを作成
letters_copy1.reverse()
print(f"方法1: {letters_copy1}")
# 方法2: スライス[::-1](新しいリストを作成)
letters_copy2 = letters[::-1]
print(f"方法2: {letters_copy2}")
実行結果
方法1: ['E', 'D', 'C', 'B', 'A'] 方法2: ['E', 'D', 'C', 'B', 'A']
問題9:要素の検索(中級)
📋 問題
リスト colors = ["赤", "青", "緑", "青", "黄"] で、「青」が何個含まれているか数えてください。
解答を見る
コード
colors = ["赤", "青", "緑", "青", "黄"]
# count()で出現回数を数える
count = colors.count("青")
print(f"「青」の数: {count}個")
実行結果
「青」の数: 2個
問題10:リストの結合(中級)
📋 問題
2つのリスト list1 = [1, 2, 3] と list2 = [4, 5, 6] を結合して、[1, 2, 3, 4, 5, 6] を作ってください。
解答を見る
コード
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 方法1: + 演算子で結合(新しいリストを作成)
result1 = list1 + list2
print(f"方法1: {result1}")
# 方法2: extend()で追加
list1_copy = list1.copy() # 元のリストを変えないようコピー
list1_copy.extend(list2)
print(f"方法2: {list1_copy}")
実行結果
方法1: [1, 2, 3, 4, 5, 6] 方法2: [1, 2, 3, 4, 5, 6]
問題11:最大値・最小値(中級)
📋 問題
リスト scores = [85, 92, 78, 95, 88] の最高点と最低点を表示してください。
解答を見る
コード
scores = [85, 92, 78, 95, 88]
# max()で最大値を取得
highest = max(scores)
print(f"最高点: {highest}点")
# min()で最小値を取得
lowest = min(scores)
print(f"最低点: {lowest}点")
実行結果
最高点: 95点 最低点: 78点
問題12:リストのソート(中級)
📋 問題
リスト numbers = [3, 7, 1, 9, 2, 5] を昇順と降順の両方で並び替えて表示してください。
解答を見る
コード
numbers = [3, 7, 1, 9, 2, 5]
# sorted()で昇順(元のリストは変わらない)
ascending = sorted(numbers)
print(f"昇順: {ascending}")
# sorted()で降順(reverse=Trueを指定)
descending = sorted(numbers, reverse=True)
print(f"降順: {descending}")
実行結果
昇順: [1, 2, 3, 5, 7, 9] 降順: [9, 7, 5, 3, 2, 1]
問題13:偶数だけを抽出(上級)
📋 問題
リスト numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] から、偶数だけを新しいリストに抽出してください。
解答を見る
コード
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 空のリストを用意
even_numbers = []
# forループで各要素をチェック
for num in numbers:
# 2で割った余りが0なら偶数
if num % 2 == 0:
even_numbers.append(num)
print(f"偶数: {even_numbers}")
実行結果
偶数: [2, 4, 6, 8, 10]
問題14:平均点の計算(上級)
📋 問題
5科目のテストの点数リスト scores = [85, 90, 78, 92, 88] について、合計点、平均点、最高点、最低点を計算して表示してください。
解答を見る
コード
scores = [85, 90, 78, 92, 88]
# sum()で合計点
total = sum(scores)
print(f"合計点: {total}点")
# 平均点 = 合計 ÷ 科目数
average = total / len(scores)
print(f"平均点: {average}点")
# max()で最高点
highest = max(scores)
print(f"最高点: {highest}点")
# min()で最低点
lowest = min(scores)
print(f"最低点: {lowest}点")
実行結果
合計点: 433点 平均点: 86.6点 最高点: 92点 最低点: 78点
問題15:リストの重複削除(上級)
📋 問題
リスト numbers = [1, 2, 3, 2, 4, 1, 5, 3, 6] から、重複を削除して、ユニークな要素だけのリストを作ってください。
ヒント: set()を使うと簡単です。
解答を見る
コード
numbers = [1, 2, 3, 2, 4, 1, 5, 3, 6]
print(f"元のリスト: {numbers}")
# set()で重複を削除してからlist()でリストに戻す
# setは重複を許さないデータ型
unique_numbers = list(set(numbers))
print(f"重複削除後: {unique_numbers}")
# ソートして見やすく
unique_numbers.sort()
print(f"ソート後: {unique_numbers}")
実行結果
元のリスト: [1, 2, 3, 2, 4, 1, 5, 3, 6] 重複削除後: [1, 2, 3, 4, 5, 6] ソート後: [1, 2, 3, 4, 5, 6]
💡 解説
set()は重複を許さないデータ型です。リストをset()に変換すると自動的に重複が削除されます。
その後、list()でリストに戻します。
❓ よくある質問
Q1: append()とextend()の違いは?
append()は1つの要素(リスト全体も1つの要素)を追加します。
extend()はリストの各要素を個別に追加します。
[1,2].append([3,4]) → [1,2,[3,4]]
[1,2].extend([3,4]) → [1,2,3,4]
Q2: remove()とpop()の違いは?
remove()は値を指定して削除します(最初に見つかった1つだけ)。
pop()はインデックスを指定して削除し、削除した値を返します。
pop()は引数なしで使うと最後の要素を削除します。
Q3: リストのコピーはどうすればいい?
=で代入すると、同じリストへの参照になってしまいます。
リストをコピーするには、copy()メソッドか[:]スライスを使います。
new_list = old_list.copy() または new_list = old_list[:]
Q4: リストに異なる型のデータを入れていい?
はい、Pythonのリストは異なる型のデータを混在できます。
["文字列", 123, 3.14, True]のようなリストも作成できます。
ただし、同じ型のデータをまとめる方が、後の処理がしやすくなります。
Q5: インデックスが範囲外になるエラーを防ぐには?
アクセス前にlen()でリストの長さを確認しましょう。
または、負のインデックス[-1]を使えば、長さに関係なく最後の要素にアクセスできます。
🎉 ステップ7のまとめ
✅ このステップで学んだこと
✓ リストは複数のデータを順番に保存できる
✓ インデックスは0から始まる(負の数で後ろから)
✓ append()、insert()、extend()で要素を追加
✓ remove()、pop()、del、clear()で要素を削除
✓ インデックスで要素を変更できる
✓ スライスでリストの一部を取り出せる
✓ sort()、reverse()、count()、index()などのメソッド
✓ copy()やスライス[:]でリストをコピー
✓ sum()、max()、min()、len()の組み込み関数
💪 次のステップへ
リストの基礎をマスターしました!
リストは、プログラミングで最もよく使うデータ構造の1つです。
複数のデータをまとめて扱えるので、非常に便利です。
次のステップでは、タプルと辞書について学びます。
リストとは違う特徴を持つデータ構造を理解しましょう!
学習メモ
Pythonプログラミング基礎 - Step 7