概要(len は「大きさ」を返す基本関数)
len は、文字列・リスト・タプル・辞書・集合などの「長さ(要素数)」を整数で返す組み込み関数です。書き方は len(対象) とシンプルで、辞書ならキーの数、文字列なら文字数、リストなら要素数が返ります。
print(len("Hello")) # 5(文字数)
print(len([10, 20, 30])) # 3(要素数)
print(len(("a", "b"))) # 2
print(len({"name": "Hanako"})) # 1(キー数)
print(len({1, 2, 3})) # 3
Python基本動作と対応するデータ型(ここが重要)
代表的な型での戻り値
- 文字列: 含まれる文字数を返します。Unicodeの結合文字や絵文字を含む場合は“目に見える文字数”と異なることがあります(len はコードポイント基準)。
- リスト/タプル/セット: 要素数。
- 辞書: キーの数(ペア数)。
- 空オブジェクト: 0 を返します。
print(len("")) # 0(空文字)
print(len([])) # 0(空リスト)
print(len({})) # 0(空辞書)
Python使えない型とエラー
数値(int/float)や None に len は使えません。ジェネレータのように「長さの概念がない」ものも同様です(TypeError)。型が不明なら、事前に isinstance で安全に分岐します。
# TypeError 例
# len(10) # ✗
# len(None) # ✗
def safe_len(x):
return len(x) if hasattr(x, "__len__") else 0
print(safe_len(10)) # 0(__len__ がないため)
print(safe_len([1,2,3])) # 3
Python性能と設計の勘所(O(1) の速さを活かす)
計算量はほぼ O(1)
len は内部に「長さ」を持つデータ構造であれば一定時間で返せるため、大きなリスト・辞書でも高速です。繰り返しの条件判定やバリデーションに安心して使えます。
nums = list(range(1_000_000))
print(len(nums)) # 高速
Pythonループや条件での使い所
- while len(lst) > 0 のような制御は可読性が高いですが、Python では if lst: の真偽値評価が慣習的で速く、意図も明確です。
- “空判定”は len(x) == 0 よりも、bool(x) を使う方が Python らしく簡潔です。
items = []
if not items: # 空なら False → True による分岐
print("空です")
Pythonよくある落とし穴と安全策(重要ポイントを深掘り)
文字列の“見た目の長さ”とのズレ
len は Unicode のコードポイント数を返します。結合文字や絵文字の肌色修飾など「1文字に見えるが複数コードポイント」なケースで、画面上の文字数と異なることがあります(テキスト UI の幅計算が必要なら別途ライブラリを検討)。
s = "e\u0301" # 合成で「é」に見える(e + 結合アキュート)
print(len(s)) # 2(見た目は1文字でもコードポイントは2)
Pythondefault(長さ前提の設計)に頼り過ぎない
データが None や数値に変わる可能性がある時、len に直に渡すと TypeError。事前の型正規化(空文字→””、空配列→[] を保証)か、防御的コード(hasattr/len)で回避します。
def normalize_list(x):
if x is None:
return []
return x
items = normalize_list(None)
print(len(items)) # 0
Pythonジェネレータ・イテレータの長さ
ジェネレータは「流れるデータ」であり、len は使えません。必要なら list(…) に展開してから数えるか、カウンタで逐次数えます。
gen = (i for i in range(5))
# len(gen) # ✗
count = sum(1 for _ in gen)
print(count) # 5
Python実用パターン(検証・集計・ループ制御)
入力検証(必須文字数・空チェック)
name = "Hanako"
if len(name) < 2:
print("名前が短すぎます")
Python集計(辞書の項目数・平均計算)
scores = {"math": 80, "eng": 70, "sci": 90}
avg = sum(scores.values()) / len(scores)
print(avg) # 80.0
Pythonループの上限制御
items = ["a", "b", "c"]
for i in range(len(items)):
print(i, items[i])
Python例題で身につける(定番から一歩先まで)
例題1:文字列・配列の基本
print(len("Python")) # 6
print(len([1, 2, 3, 4])) # 4
Python例題2:辞書のキー数と空判定
user = {"name": "Hanako", "age": 20}
print(len(user)) # 2
if user:
print("空ではない")
Python例題3:バリデーション(最小長の検査)
password = "abc123"
MIN_LEN = 6
if len(password) < MIN_LEN:
print("短すぎます")
Python例題4:ジェネレータの要素数を数える
gen = (n for n in range(100) if n % 10 == 0)
count = sum(1 for _ in gen)
print(count) # 10
Pythonまとめ
len は「長さ・要素数」を返す標準関数で、文字列・リスト・辞書・集合など幅広く使えます。計算量は概ね O(1) と高速で、検証・集計・ループ制御に最適。一方、数値/None/ジェネレータでは TypeError になるため、型の正規化や防御的な分岐を忘れずに。文字列の“見た目の長さ”とコードポイントの差にも注意しておくと、実務での混乱を防げます。
