閉じる

Pythonでリストの長さを取得するlen()の使い方

Pythonのリストに何個の要素が入っているかは、組み込み関数len()で一瞬にして調べられます。

本記事では、len()の構文から空リストの扱い、要素の追加や削除後の再確認、実務での使い方のコツ、2次元リストの数え方、初心者がつまずきやすい注意点まで、動くサンプル付きで丁寧に解説します。

リストの長さを取得するlen()の基本

len()の構文と返り値

len()は、コンテナの要素数を整数で返す関数です。

リストに対しては、格納されている要素の個数を即座に返します。

サンプルコード

Python
# 基本のlen()。要素数が3のリスト
colors = ["red", "green", "blue"]

count = len(colors)  # 3が返る
print("要素数:", count)  # 整数が返る点に注目
実行結果
要素数: 3

ポイント

  • 返り値は整数(int)です。
  • リストの中身の型(文字列、数値、他のリストなど)に関係なく、要素の数だけを数えます。

空リストの長さを確認する

空のリストの長さは0です。

空かどうかを数で確認したいときにも使えます。

Python
# 空リストの長さは0
empty = []
print(len(empty))  # 0が表示される
実行結果
0

要素の追加・削除後にlen()で再確認

len()現在の状態の要素数を返すため、リスト操作の前後で呼び出すと、変化を追跡できます。

Python
numbers = [10, 20]
print("初期:", len(numbers))  # 2

# 末尾に1要素追加
numbers.append(30)
print("append後:", len(numbers))  # 3

# 複数要素をまとめて追加
numbers.extend([40, 50])
print("extend後:", len(numbers))  # 5

# 末尾の要素を1つ削除
numbers.pop()
print("pop後:", len(numbers))  # 4

# 値が20の要素を削除(最初に見つかったもの)
numbers.remove(20)
print("remove後:", len(numbers))  # 3

# すべての要素を削除
numbers.clear()
print("clear後:", len(numbers))  # 0
実行結果
初期: 2
append後: 3
extend後: 5
pop後: 4
remove後: 3
clear後: 0

len()の実用例と書き方のコツ

空リスト判定のベストプラクティス

リストが空かどうかを判定する場合、Pythonでは「真偽値コンテキスト」を活用するのが簡潔です。

if not my_list:が最も読みやすく、慣用的です。

Python
items = []

# Pythonicな書き方(推奨)
if not items:
    print("空です")
else:
    print("要素があります")

# 明示的にlen()を使う書き方(可読性はやや冗長)
if len(items) == 0:
    print("lenで空を判定しています")
実行結果
空です
lenで空を判定しています

条件分岐で要素数をチェックする

閾値で分岐したい場合は、len()の結果をそのまま比較します。

Python
# 例: 7件のメッセージがある
messages = ["m" + str(i) for i in range(7)]  # ["m0", "m1", ... "m6"]

if len(messages) >= 10:
    print("10件以上です")
elif 1 <= len(messages) < 10:
    print(f"{len(messages)}件ありますが、10件未満です")
else:
    print("空です")
実行結果
7件ありますが、10件未満です

インデックスが必要なループのrange(len())

要素の位置(インデックス)が必要な場合は、range(len(list))が使えます。

インデックスと値の両方が欲しいときはenumerate()が読みやすいです。

Python
fruits = ["apple", "banana", "cherry"]

# インデックスが必要なときのrange(len())
for i in range(len(fruits)):
    print(i, fruits[i])  # 位置iと要素fruits[i]を同時に扱える

# 代替: enumerateでインデックスと値を同時に取り出す
for i, name in enumerate(fruits):
    print(i, name.upper())  # 値を加工しつつ表示
実行結果
0 apple
1 banana
2 cherry
0 APPLE
1 BANANA
2 CHERRY

まとめ表(よく使うパターン)

ケース推奨される書き方補足
空かどうか判定if not lst:可読性が高い
非空か判定if lst:要素が1つ以上あるか
閾値で判定if len(lst) >= N:正確に件数で分岐
インデックスが不要for x in lst:最もシンプル
インデックスが必要for i in range(len(lst)):位置指定が必要なとき
インデックス+値for i, x in enumerate(lst):読みやすく安全

二重リストの長さを数える方法

行数はlen(リスト)で数える

2次元リスト(リストの中にリストが入っている構造)では、外側のリストの長さが行数です。

Python
# 3行×3列の2次元リスト
matrix = [
    [1, 2, 3],   # 1行目
    [4, 5, 6],   # 2行目
    [7, 8, 9],   # 3行目
]

rows = len(matrix)
print("行数:", rows)
実行結果
行数: 3

列数はlen(先頭の行)で数える

等長の2次元リスト(各行の長さが同じ)なら、先頭の行の長さが列数です。

空リストに備えてガードを書くと安全です。

Python
# 3行×3列の2次元リスト
matrix = [
    [1, 2, 3],   # 1行目
    [4, 5, 6],   # 2行目
    [7, 8, 9],   # 3行目
]

# 先頭の行の長さで列数を数える
cols = len(matrix[0]) if matrix else 0
print("列数:", cols)

# 参考: 先頭行が空だったり、行ごとに長さが異なる場合の扱い
ragged = [[1, 2], [], [3, 4, 5]]  # 不揃いな2次元リスト
cols_ragged = len(ragged[0]) if ragged and ragged[0] else 0
print("先頭行の列数(不揃い):", cols_ragged)
実行結果
列数: 3
先頭行の列数(不揃い): 2

不揃いの2次元リストでは注意

行ごとに列数が異なる場合、全体の「最大列数」を知りたいなら先頭行ではなく、各行の長さの最大値を取ります。

Python
ragged = [[1, 2], [], [3, 4, 5]]
max_cols = max((len(row) for row in ragged), default=0)
print("最大列数:", max_cols)
実行結果
最大列数: 3

2次元リストの全要素数を求める

全要素数は、等長なら行数×列数、不揃いなら各行の長さの合計で求めます。

Python
# 等長の2次元リスト
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
rows = len(matrix)
cols = len(matrix[0]) if matrix else 0
total_rect = rows * cols
print("全要素数(等長):", total_rect)  # 3×3=9

# 不揃いの2次元リスト
ragged = [[1, 2], [], [3, 4, 5]]
total_ragged = sum(len(row) for row in ragged)
print("全要素数(不揃い):", total_ragged)  # 2+0+3=5
実行結果
全要素数(等長): 9
全要素数(不揃い): 5

よくあるエラーと注意点

Noneや数値にlen()は使えない

len()は「長さ」という概念を持つオブジェクトにのみ使えます。

Noneや整数など、長さを持たない値に対して呼ぶとTypeErrorになります。

Python
samples = [None, 10]

for x in samples:
    try:
        # 長さを持たない値にlen()を呼ぶとTypeError
        print("len(", x, ") =", len(x))
    except TypeError as e:
        print(f"TypeError: {e}")
実行結果
TypeError: object of type 'NoneType' has no len()
TypeError: object of type 'int' has no len()

補足

  • リスト、文字列、タプル、辞書、集合などは長さを持ちますが、イテレータやジェネレータは長さを持たないことが多く、同様にTypeErrorになります。
  • 本記事の主題はリストなので、他の型の扱いはここでは詳細を省きます。

len()はリストで即時に計算される

Pythonのリストは要素数を内部に保持しているため、len(list)は要素数に比例した時間はかからず、一定時間(計算量O(1))で返ります。

Python
# 大きなリストでもlen()は即時(O(1))
big_list = list(range(1_000_000))  # 100万要素
print("len(big_list) =", len(big_list))
実行結果
len(big_list) = 1000000

メモ

  • len()はリスト全体を走査しません。したがって、非常に大きいリストでも要素数の取得は高速です。
  • 一方で、sum(x for x in list)のような処理は走査が必要です。用途に応じて使い分けてください。

len()の結果を文字列にして出力する

文字列連結に整数のままのlen()を使うとTypeErrorになります。

文字列化するか、f文字列を使うのが安全です。

Python
items = [1, 2, 3]

# 失敗例: 文字列と数値の直接連結
try:
    print("要素数は" + len(items) + "個です")  # TypeError
except TypeError as e:
    print(f"結合に失敗: {e}")

# 正解1: f文字列で埋め込む(推奨)
print(f"要素数は{len(items)}個です")

# 正解2: strで明示変換
print("要素数は" + str(len(items)) + "個です")

# 正解3: formatを使う
print("要素数は{0}個です".format(len(items)))
実行結果
結合に失敗: can only concatenate str (not "int") to str
要素数は3個です
要素数は3個です
要素数は3個です

まとめ

len()は、リストの要素数を即座に知るための基本かつ強力な関数です。

空リストの確認から、要素追加・削除後の再計測、閾値による条件分岐、range(len())を使ったインデックス付きループまで、日常的な場面で頻出します。

2次元リストでは、len(外側)が行数、len(先頭の行)が列数であり、全要素数は等長なら「行×列」、不揃いなら「各行の長さの合計」で求めるのが定石です。

加えて、Noneや数値にlen()は使えないこと、リストに対するlen()はO(1)で高速に返ること、文字列連結時はf文字列やstr()で型を揃えることを覚えておくと、エラーの回避と可読性の向上に役立ちます。

まずは小さな例から慣れ、実務の場面でも迷わず使えるようにしていきましょう。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!