Pythonでリストのサイズ(要素数)を取得

Pythonでリスト(list型オブジェクト)のサイズ(要素数)を取得するには組み込み関数len()を使います。

  1. 組み込み関数 len() — Python 3.6.5 ドキュメント

以下の内容について説明します。

len関数でリストのサイズ(要素数)を取得 2次元配列(リストのリスト)の場合 多次元リストの場合

そのほかの型のオブジェクトに対するlen()の使い方は

len関数でリストのサイズ(要素数)を取得

組み込み関数len()の引数にリストを渡すと、そのサイズ(要素数)が整数値で返されます。

l = [0, 1, 2, 3]

print(len(l))
# 4

変数に代入してもいい。

l_length = len(l)

print(l_length)
# 4

print(type(l_length))
# <class 'int'>

二次元配列(リストのリスト)の場合

リストの要素にリストを格納することで二次元配列構造を実現できます。 これをそのままlen()に渡すと、要素として格納されたリストの個数が返されます。

l_2d = [[0, 1, 2], [3, 4, 5]]

print(len(l_2d))
# 2

各リストの要素数(各行の要素数)はリスト内包表記で取得できます。

print([len(v) for v in l_2d])
# [3, 3]

要素数の合計はsum()で算出できます。ここではリスト内包表記のジェネレータ版(ジェネレータ式)を使っています。ジェネレータ式は[]ではなく()で囲むが、この例のprint()ように()内で使うときは()を二重に書く必要はなくジェネレータ式の()は省略できます。

print(sum(len(v) for v in l_2d))
# 6

NumPyがインストールされている環境であれば、NumPy配列ndarrayに変換しても問題ありません。属性sizeで全要素数、属性shapeで形状(行数、列数)が取得できます。

import numpy as np

l_2d = [[0, 1, 2], [3, 4, 5]]
arr_2d = np.array(l_2d)

print(arr_2d)
# [[0 1 2]
#  [3 4 5]]

print(arr_2d.size)
# 6

print(arr_2d.shape)
# (2, 3)

多次元リストの場合

サイズがバラバラのリストを要素とするリストについて考える。 これをそのままlen()に渡すと、要素として格納されたオブジェクトの個数が返されます。

l_multi = [[0, 1, 2, [10, 20, 30]], [3, 4, 5], 100]

print(len(l_multi))
# 3

また、これをそのままnumpy.array()の引数に渡すと、要素数がバラバラのリスト型オブジェクトを要素としたNumPy配列ndarrayが生成されます。属性sizeやshapeも要素として格納されたオブジェクトに対して算出されます。

arr_multi = np.array(l_multi)
print(arr_multi)
# [list([0, 1, 2, [10, 20, 30]]) list([3, 4, 5]) 100]

print(arr_multi.size)
# 3

print(arr_multi.shape)
# (3,)

このようなサイズがバラバラのリストを要素とするリストの全要素数を取得するためには、再帰的にリストの要素数を算出する関数を定義します。 どのような形でリストがネストされていても全要素数がカウントされます。

def my_len(l):
    count = 0
    if isinstance(l, list):
        for v in l:
            count += my_len(v)
        return count
    else:
        return 1

l_multi = [[0, 1, 2, [10, 20, 30]], [3, 4, 5], 100]
print(my_len(l_multi))
# 10

l_2d = [[0, 1, 2], [3, 4, 5]]
print(my_len(l_2d))
# 6

l = [0, 1, 2, 3]
print(my_len(l))
# 4
Last Updated: 6/26/2019, 10:34:03 PM