Pythonのlen関数の使い方をズバッと解説
- 作成日: 2021-06-22
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのlen関数の使い方
Pythonにはオブジェクトの長さを得るための組み込み関数len()があります。
このlen()
を使うことでさまざまなオブジェクト、たとえば文字列やリストなどの長さを得ることができます。
結論から言うとlen()
は↓のように使います。
print(len('abc'))
# 3
print(len([1, 2, 3]))
# 3
print(len((1, 2, 3)))
# 3
print(len({'a': 1, 'b': 2, 'c': 3}))
# 3
print(len({1, 2, 3}))
# 3
🦝 < 3ばっかり
🐭 < そうね
この記事ではPythonのlen()
について具体的に↓を見ていきます。
- len()の構造
- 文字列の長さを得る
- リストの長さを得る
- タプルの長さを得る
- 辞書の長さを得る
- 集合の長さを得る
- クラスの__len__()の定義
- 非対応オブジェクトを渡した場合
- len()のCPythonの実装
関連記事
頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
文字列の描画 - Rustで作るWindowsアプリ
改行付きの文字列を描画する - Rustで作るWindowsアプリ
len()の構造
len()
は↓のような構造になっています。
len(s)
len()
は組み込み関数で、特にインポートの必要もなくすぐに使うことができます。
len()
は1つの引数を取ります。
len()
はその第1引数のオブジェクトの長さを取得して、それを整数で返します。
CPythonの実装ではlen()
はOverflowError
を返すことがあります。
これは長さがsys.maxsize
を超えた場合です。つまりそれはrange(2 ** 100)
に相当します。
import sys
print(sys.maxsize)
# 9223372036854775807
try:
len(range(2 ** 100))
except OverflowError as e:
print(e)
# Python int too large to convert to C ssize_t
文字列の長さを得る
len()
で文字列の長さを得るには↓のようにします。
s = 'abc'
n = len(s)
print(n)
# 3
print(len('abc'))
# 3
リストの長さを得る
len()
でリストの長さを得るには↓のようにします。
l = [1, 2, 3]
n = len(l)
print(n)
# 3
print(len([1, 2, 3]))
# 3
タプルの長さを得る
len()
でタプルの長さを得るには↓のようにします。
t = (1, 2, 3)
n = len(t)
print(n)
# 3
print(len((1, 2, 3)))
# 3
辞書の長さを得る
len()
で辞書の長さを得るには↓のようにします。
d = {'a': 1, 'b': 2, 'c': 3}
n = len(d)
print(n)
# 3
print(len({'a': 1, 'b': 2, 'c': 3}))
# 3
集合の長さを得る
len()
で集合の長さを得るには↓のようにします。
s = {1, 2, 3}
n = len(s)
print(n)
# 3
print(len({1, 2, 3}))
# 3
クラスの__len__()の定義
クラスのメソッド__len__()
を定義すると、オブジェクトがlen()
に渡されたときの振る舞いを定義することができます。
class Animals:
def __len__(self):
return 3
animals = Animals()
print(len(animals))
# 3
↑の場合、Animals
の__len__()
はreturn
で3
を返しています。
そのためAnimals
のオブジェクトをlen()
に渡すと結果が3
になります。
非対応オブジェクトを渡した場合
len()
に非対応のオブジェクトを渡すと例外TypeError
が送出されます。
try:
len(None)
except TypeError as e:
print(e)
# object of type 'NoneType' has no len()
↑の場合、len()
にNone
を渡していますが、None
から長さを得ることが出来ないためTypeError
になります。
len()のCPythonの実装
Pythonの実装としてよく用いられるCPythonではlen()
はどのように実装されているのでしょうか。
Python3.10の段階ではlen()
はbltinmodule.c
に定義されています。
builtin_len()
という関数がlen()
の実装です。
サイズを取り出して返してるだけの非常にシンプルな実装ですね。
おわりに
今回はPythonのlen()
を見てみました。
len()
は非常に利用頻度の高い組み込み関数と言えます。
🦝 < いつもお世話になってます
🐭 < 未lenたらたら