note.nkmk.me

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

Date: 2018-06-06 / tags: Python, リスト
このエントリーをはてなブックマークに追加

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

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

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

そのほかの型のオブジェクトに対するlen()の使い方は以下の記事を参照。

スポンサーリンク

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

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

l = [0, 1, 2, 3]

print(len(l))
# 4
source: list_len.py

変数に代入してもいい。

l_length = len(l)

print(l_length)
# 4

print(type(l_length))
# <class 'int'>
source: list_len.py

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

リストの要素にリストを格納することで二次元配列構造を実現できる。

これをそのままlen()に渡すと、要素として格納されたリストの個数が返される。

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

print(len(l_2d))
# 2
source: list_len.py

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

print([len(v) for v in l_2d])
# [3, 3]
source: list_len.py

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

print(sum(len(v) for v in l_2d))
# 6
source: list_len.py

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)
source: list_len.py

多次元リストの場合

サイズがバラバラのリストを要素とするリストについて考える。

これをそのままlen()に渡すと、要素として格納されたオブジェクトの個数が返される。

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

print(len(l_multi))
# 3
source: list_len.py

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

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,)
source: list_len.py

このようなサイズがバラバラのリストを要素とするリストの全要素数を取得するためには、再帰的にリストの要素数を算出する関数を定義する。

どのような形でリストがネストされていても全要素数がカウントされる。

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
source: list_len.py
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事