Pythonでリストのサイズ(要素数)を取得
Pythonでリスト(list
型オブジェクト)のサイズ(要素数)を取得するには組み込み関数len()
を使う。
以下の内容について説明する。
- len関数でリストのサイズ(要素数)を取得
- 2次元配列(リストのリスト)の場合
- 多次元リストの場合
そのほかの型のオブジェクトに対するlen()
の使い方は以下の記事を参照。
len()
で取得できるのは全体の要素数。特定の要素の個数を取得したい場合はcount()
メソッドか標準ライブラリcollectionsのCounterを使う。
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
各リストの要素数(各行の要素数)はリスト内包表記で取得できる。
- 関連記事: Pythonリスト内包表記の使い方
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に変換してもOK。属性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