Python環境を起動中... 初回のみ数秒かかります
Lesson 6 / 20

リスト

このレッスンで学ぶこと

  • リストの作成と基本操作(追加・削除)ができる
  • インデックスと負のインデックスで要素にアクセスできる
  • スライスで部分リストを取り出せる
  • ソート(sort/sorted)でリストを並べ替えられる

1. リストの作成と基本操作

リストは複数の値を順番に格納するデータ構造です。 角括弧 [] で作成し、異なる型の値を混在させることもできます。 機械学習では画像のピクセル値・患者IDのリスト・ラベルリストなど、ほぼあらゆる場面でリストが登場します。

sample_1.py
Ctrl+Enter
出力

💡 \n(バックスラッシュ n)とは?:
\n はPythonの文字列で使える改行文字(エスケープシーケンス)です。 ターミナルや標準のPython環境で実行すると空白行として表示されますが、 このプラットフォームの出力エリアでは視覚的な違いは出ません。
実際のコードでよく見かける記法なので、「改行を表す特殊文字」として覚えておきましょう。

# ターミナルで実行すると "A" と "B" の間に空行が入る
print("A")
print("\nB")

💡 remove vs pop の違い:
どちらも元のリストから要素を削除する破壊的操作です。違いは「戻り値」と「指定方法」です。

指定方法戻り値用途
remove(値)削除したいを指定なし(None値が分かっているとき
pop(i)削除したいインデックスを指定(省略で末尾)削除した値を返す取り出して使いたいとき
items = ["A", "B", "C"]
items.remove("B")    # "B" を削除。戻り値はない
val = items.pop(0)   # 先頭を取り出し → val = "A"、リストは ["C"] になる

末尾から順に取り出す「スタック」操作には pop() が定番です。

2. インデックスとスライス

Pythonのインデックスは 0始まり です。 負のインデックス を使うと末尾から数えられます(-1 が最後の要素)。

スライス [start:stop:step] で部分リストを取り出せます。 NumPy配列やPyTorchテンソルのスライスも同じ構文なので、ここでしっかり覚えておきましょう。

sample_2.py
Ctrl+Enter
出力

💡 スライスの覚え方: [start:stop] は「start 番目から始まり stop 番目の手前まで」。 [:n] は先頭 n 件、[-n:] は末尾 n 件という使い方が多いです。

3. リストのソートと検索

.sort() はリストを 破壊的に 並べ替えます(元のリストが変わります)。 sorted() は元のリストを変えずに新しい並べ替えたリストを返します。 どちらを使うかは「元のリストを保持したいか」で判断してください。

sample_3.py
Ctrl+Enter
出力

💡 sort() と sorted() — 書き方と動作の違い:
見た目は似ていますが、呼び出し方元のリストへの影響が異なります。

書き方元のリスト戻り値
sorted()sorted(リスト) — リストを引数として渡す変わらない新しい並び替え済みリスト
.sort()リスト.sort() — リストに対して . でつなぐ変わる(破壊的)なし(None

sorted() は Pythonが最初から用意している組み込み関数です。 一方 .sort() はリストが持つメソッド(オブジェクトに紐づいた関数)で、 . をつけてリスト自身に対して呼び出します。
「組み込み関数」と「メソッド」の違いはレッスン13「クラスの基礎」で詳しく学びます。

4. リストの便利な操作

リストはPythonで最も使われるデータ構造です。 連結・コピー・2次元リストなど、実務でよく使うパターンを確認しましょう。

sample_4.py
Ctrl+Enter
出力

💡 + 連結 と .extend() の違い:
どちらも2つのリストをくっつけますが、元のリストを変えるかどうかが異なります。

書き方元のリスト戻り値
+new = a + b変わらない新しい結合済みリスト
.extend()a.extend(b)変わる(破壊的)なし(None
a = [1, 2]
b = [3, 4]
c = a + b          # a は変わらない。c = [1, 2, 3, 4]
a.extend(b)        # a 自体が [1, 2, 3, 4] になる

大量データを追加する処理では .extend() の方がメモリ効率が良いです。元のリストを保持したい場合は + を使いましょう。

💡 参照コピーの罠: b = a はリストのコピーではなく「同じリストへの参照」です。 片方を変えるともう片方も変わります。 独立したコピーが必要なら .copy()list(a) を使ってください。 NumPyでも同様の罠があるので要注意です。

5. 練習問題

問題 1

検査値リストの統計を求める

下の血糖値リスト(mg/dL)から最大値・最小値・平均値を計算して出力してください。 また sorted() を使って昇順に並べたリストも表示してください。

exercise_1.py
出力
ヒントを見る(答え+解説)
glucose = [110, 98, 125, 88, 142, 103, 116, 95]
print(f"最大: {max(glucose)}")
print(f"最小: {min(glucose)}")
print(f"平均: {sum(glucose)/len(glucose):.1f}")
print("昇順:", sorted(glucose))

max()/min()/sum()/len() はリストに使える組み込み関数です。sorted() は元のリストを変えずに並べ替えたリストを返します。

問題 2

スライスで先頭3件・末尾3件を取得する

下の CT 値リストから、先頭3件と末尾3件をスライスで取り出して表示してください。

exercise_2.py
出力
ヒントを見る(答え+解説)
ct_values = [120, 150, 98, 210, 175, 88, 135, 160, 95, 200]
print("先頭3件:", ct_values[:3])   # [120, 150, 98]
print("末尾3件:", ct_values[-3:])  # [160, 95, 200]

[:3] は「先頭から3件(インデックス0, 1, 2)」、[-3:] は「末尾から3件」を取り出すスライスです。NumPy配列やPyTorchテンソルでも同じ構文が使えます。

問題 3

条件を満たす要素だけのリストを作る

下の WBC 値リストから for ループと append() を使って、 10000 以上の異常値だけを集めたリスト abnormal を作り、件数と内容を出力してください。

exercise_3.py
出力
ヒントを見る(答え+解説)
wbc_list = [6200, 7100, 12500, 5800, 8400, 15200, 6900, 7400, 11000, 6300]
abnormal = []
for wbc in wbc_list:
    if wbc >= 10000:
        abnormal.append(wbc)
print(f"異常値: {len(abnormal)} 件")
print("値:", abnormal)
# → 異常値: 3 件 / 値: [12500, 15200, 11000]

for ループで条件を満たす要素だけを append() で別リストに追加するフィルタリングパターンです。このパターンはレッスン12「内包表記」で1行で書けるようになります。

まとめ

このレッスンのポイント

  • リストは [] で作成し、append/insert/remove/pop で操作できる
  • インデックスは 0始まり、負のインデックスで末尾から参照できる
  • [start:stop:step] スライスで部分リストを取り出せる(NumPy・Torchも同じ構文)
  • sort() は破壊的(元のリストを変更)、sorted() は非破壊的
  • = は参照コピー。独立したコピーには .copy() を使う
  • len/min/max/sum/in などの組み込み関数が使える

自由に試してみましょう:

free_practice.py
Ctrl+Enter
出力

完了するとトップページに進捗が表示されます