ユーニックス総合研究所

  • home
  • archives
  • python-len

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__()return3を返しています。
そのため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たらたら