len()

len()

len()

 len() はオブジェクトのサイズ (要素の数) を返します。リスト、タプル、range、文字列、バイト列、辞書、集合などを受け取ることができます。

len(list)

 len() を使ってリストの要素を数えてみます。

# PYTHON_LEN_01-1

x = ["a", "b", "c", "d", "e"]

# オブジェクトのサイズを取得
print(len(x))
5

 次は len() に多重配列を渡してみます。

# PYTHON_LEN_01-2

x = [["a", "b", "c"], ["d", "e", ["f", "g", "h"]]]

# オブジェクトのサイズを取得
len(x)
2

 8 ではなく 2 が出力されました。len() は格納されたオブジェクトの数を返す関数です。上のコードでは、x には、["a", "b", "c"] と ["d", "e", ["f", "g", "h"]] という 2 つのオブジェクトが格納されていると考えます。
 

len(str)

 len() に文字列を渡すと文字数が返ります。

# PYTHON_LEN_02

# 文字列を定義
x = "Python"

# 文字数をカウント
print(len(x))
6

 

len(ndarray)

 拡張パッケージで定義されたオブジェクトの中にも、len() に渡せるように設計されているものがあります。たとえば、NumPy の配列 (ndarray) を len() に渡して要素数を調べることができます。

# PYTHON_LEN_03-1

import numpy as np

# arr=[1 2 3 4 5 6 7 8 9]
arr = np.arange(1, 10)

# 配列の要素数を数える
print(len(arr))
9

 リストと同じように、len() に多次元配列を渡すこともできます。
 たとえば、次のような 2 次元配列 arr を定義します。

# PYTHON_LEN_03-2

# 2次元配列を定義
arr = np.arange(1, 10).reshape(3, 3)

print(arr)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

 この場合、len(arr) は arr に格納されている 1 次元配列の数をカウントします。

# PYTHON_LEN_03-3

# arrに格納されたオブジェクトを数える
len(arr)
3

 

特殊メソッド __len__()

 len() はクラスに定義された特殊メソッド __len__() を呼び出す関数です。すなわち、クラスごとに格納されたオブジェクトを数えるメソッドが __len__() という名前で定義されています。組み込み関数のリストと NumPy の配列では、__len__() の中身は異なるということです。したがって、クラスの中に適当な機能をもつ __len()__ を定義しておけば、len() に渡すことができます。

# PYTHON_LEN_04

class Object_A:
    def __len__(self):
        return 10

x = Object_A()

len(x)
10