【Python】リストの要素数を取得する方法

【Python】リストの要素数を取得する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonでリスト(配列)の要素数を取得したいとき、どの関数を使えばよいか迷う方は多いです。「サイズ」「長さ」「要素数」といった用語の違いが曖昧なまま検索している方も少なくありません。

Pythonではリストの要素数を取得する方法として、組み込み関数len()が基本です。用途に応じてcount()collections.Counterを使い分ける場面もあるため、それぞれの違いを正しく理解しておく必要があります。

この記事では、Pythonのリストの要素数をlen関数で取得する基本的な方法から、ネストされたリストの要素数取得、特定要素のカウント、そして「サイズ」「長さ」「要素数」の違いまでをサンプルコード付きで解説していきます。



Pythonのリスト(配列)の要素数をlen関数で取得する方法

Pythonのリスト(配列)の要素数を取得するには、組み込み関数であるlen()を使用します。Pythonでは通常listを使用し、日本語では慣習的に「配列」と呼ばれることがありますが、厳密にはlistと標準ライブラリarray.arrayは異なるデータ型です。len()関数とは、シーケンス型やコレクション型に含まれる要素の個数を整数値で返す関数です。

基本的な書き方は、以下の通りです。

len(リストオブジェクト)

len()関数を使ったリストの要素数取得方法として、以下の2つを紹介します。

  1. 1次元リストの要素数を取得する
  2. 文字列や数値が混在するリストの要素数を取得する

いずれの場合もlen()関数の使い方は同じで、リストに格納されている要素の型に関係なく個数を返します。

それでは各項目について、詳しく解説していきます。

1次元リストの要素数を取得する

1次元リストとは、要素がネスト(入れ子)されていない平坦な構造のリストのことです。len()関数にリストを渡すと、リスト内の要素数を整数値として返します。

以下のコードは、文字列のリストの要素数を取得する例です。

fruits = ["apple", "banana", "cherry", "date", "elderberry"]
count = len(fruits)
print(count)  # 5

上記のコードでは、5つの文字列を格納したリストfruitsの要素数をlen()で取得しています。実行結果として5が出力されます。

数値のみのリストでも同様に動作します。以下のコードでは、整数を格納したリストの要素数を取得しています。

numbers = [10, 20, 30, 40]
print(len(numbers))  # 4

このように、len()関数はリスト内の要素の型に依存せず、格納されている要素の個数をそのまま返す仕組みです。

文字列や数値が混在するリストの要素数を取得する

Pythonのリストは異なるデータ型の要素を混在させて格納できるため、文字列や整数、浮動小数点数が混ざったリストでもlen()関数で要素数を取得できます。len()は要素の型を判別せず、リスト内のトップレベル要素の個数のみを返します。

以下のコードは、複数のデータ型が混在するリストの要素数を取得する例です。

mixed = ["hello", 42, 3.14, True, None]
print(len(mixed))  # 5

上記のコードでは、文字列や整数、浮動小数点数、真偽値Noneが混在するリストの要素数を取得しています。データ型が異なっていても、要素の個数として5が正しく返されます。

リスト内にリストが含まれる場合でも、len()はネストされた内部リストを1つの要素として数えます。以下のコードで動作を確認できます。

mixed_nested = [1, "two", [3, 4, 5]]
print(len(mixed_nested))  # 3

[3, 4, 5]というリストは内部に3つの要素を持ちますが、len()はトップレベルの要素数のみを返すため、結果は3です。ネストされたリスト内部の要素数も含めて取得したい場合は、別の方法が必要になります。

Pythonのネストされたリスト(配列)の要素数を取得する方法

ネストされたリストとは、リストの中にリストが格納された構造のことで、2次元リストや多次元リストとも呼ばれます。前述のlen関数をネストされたリストに使用すると、最も外側のリストの要素数のみが返されるため、全要素数を取得するには別の方法が必要です。

ネストされたリストの要素数を取得する方法として、以下の2つがあります。

  1. 2次元リストの行数を取得する
  2. 2次元リストの全要素数を取得する

それぞれの方法は用途が異なり、行数の取得にはlen関数をそのまま使い、全要素数の取得にはリスト内包表記とsum関数を組み合わせます。

それでは各項目について、詳しく解説していきます。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

2次元リストの行数を取得する

2次元リストの行数とは、外側のリストに格納されている内側のリストの個数のことです。len関数を2次元リストに直接適用すると、外側のリストの要素数、つまり行数が返されます。

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

row_count = len(matrix)
print(row_count)  # 3

上記のコードでは、3つの内側リストを持つ2次元リストに対してlen関数を適用しています。結果として外側のリストの要素数である3が返されます。

各行の要素数(列数)を取得したい場合は、内側のリストに対してlen関数を適用します。以下のコードでは、各行の列数を個別に取得しています。

matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

for i, row in enumerate(matrix):
    print(f"行{i}: {len(row)}個")
# 行0: 3個
# 行1: 2個
# 行2: 4個

上記のコードでは、enumerate関数を使って各行のインデックスと内側リストを取り出し、それぞれにlen関数を適用しています。行ごとに要素数が異なるリスト(不均一なリスト)でも、各行の列数を正確に取得できます。

2次元リストの全要素数を取得する

2次元リスト(2階層のリスト)に含まれる全ての要素の合計数を取得するには、sum関数とジェネレータ式を組み合わせます。ジェネレータ式とは、リスト内包表記と似た構文で、メモリを節約しながら値を1つずつ生成する仕組みのことです。

この方法は2階層のリストにのみ有効であり、3階層以上のネストには対応していません。

matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

total = sum(len(row) for row in matrix)
print(total)  # 9

上記のコードでは、各行のlen関数の戻り値をジェネレータ式で生成し、sum関数で合計しています。3行の要素数(3 + 2 + 4)を合算した結果、全要素数として9が返されます。

別の方法として、内側リストの全要素を1つのリストに展開(フラット化)してからlen関数を適用する方法もあります。以下のコードでは、リスト内包表記で2次元リストをフラット化しています。

matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

flat = [elem for row in matrix for elem in row]
print(len(flat))  # 9
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

上記のコードでは、二重のfor文を使って内側リストの全要素を1つのリストに展開し、そのリストの要素数をlen関数で取得しています。このフラット化の方法も2階層のリストにのみ有効です。

単に個数だけ知りたい場合はsum+ジェネレータ式の方が新しいリストを作らないためメモリ効率が良く、フラット化後のリストを他の処理でも使用する場合はリスト内包表記が適しています。

Pythonのリストで特定の要素数をカウントする方法

Pythonのリストでは、len関数で取得できるのはリスト全体の要素数です。特定の値がリスト内に何回出現するかを調べるには、countメソッドcollections.Counterクラスを使用します。

特定の要素の出現回数をカウントする方法として、以下の2つがあります。

  1. countメソッドで特定の要素の出現回数を取得する
  2. collections.Counterで全要素の出現回数を集計する

countメソッドは1つの値を指定してその出現回数を返し、Counterクラスはリスト内の全要素の出現回数を一括で集計できます。用途に応じて使い分けることによって、効率的にカウント処理を実装できるでしょう。

それでは各方法について、詳しく解説していきます。

countメソッドで特定の要素の出現回数を取得する

countメソッドは、Pythonのリストに組み込まれたメソッドで、引数に指定した値がリスト内に何回出現するかを整数で返します。リスト.count(値)の形式で呼び出し、該当する値の個数を返します。

以下のコードでは、countメソッドを使って特定の要素の出現回数を取得しています。

fruits = ["apple", "banana", "apple", "orange", "apple", "banana"]

# "apple"の出現回数を取得する
apple_count = fruits.count("apple")
print(apple_count)  # 3

# "banana"の出現回数を取得する
banana_count = fruits.count("banana")
print(banana_count)  # 2

# リストに存在しない要素を指定した場合
grape_count = fruits.count("grape")
print(grape_count)  # 0

上記のコードでは、fruits.count("apple")が3を返し、リスト内に存在しない"grape"を指定した場合は0を返しています。countメソッドはリストに存在しない値を指定してもエラーにならず、0を返す仕様です。

数値のリストでも同様にcountメソッドを使用できます。

numbers = [1, 2, 3, 2, 1, 2, 4, 1]

# 数値の出現回数を取得する
print(numbers.count(1))  # 3
print(numbers.count(2))  # 3
print(numbers.count(5))  # 0

数値リストの場合も文字列と同じく、指定した値の出現回数を整数で取得できます。ただし、countメソッドは呼び出すたびにリスト全体を走査するため、複数の要素を一括でカウントしたい場合は次のcollections.Counterが適しています。

collections.Counterで全要素の出現回数を集計する

collectionsとは、Python標準ライブラリに含まれる特殊なコンテナ型を提供するモジュールのことです。collections.Counterはこのモジュールに含まれるクラスで、ハッシュ可能な要素(文字列や数値など)を持つリストを渡すと、全要素の出現回数を辞書のサブクラスとして一括集計します。なお、リスト内にリストや辞書などハッシュ不可能な要素が含まれる場合はTypeErrorが発生します。

以下のコードでは、Counterクラスを使ってリスト内の全要素の出現回数を集計しています。

from collections import Counter

fruits = ["apple", "banana", "apple", "orange", "apple", "banana"]

# 全要素の出現回数を集計する
counter = Counter(fruits)
print(counter)  # Counter({'apple': 3, 'banana': 2, 'orange': 1})

# 特定の要素の出現回数を取得する
print(counter["apple"])   # 3
print(counter["banana"])  # 2
print(counter["grape"])   # 0(存在しないキーでもエラーにならない)

上記のコードでは、from collections import CounterでCounterクラスをインポートし、リストを引数に渡しています。Counterオブジェクトは辞書のようにキーを指定して出現回数を取得でき、存在しないキーを指定した場合は0を返します。

Counterクラスにはmost_commonメソッドがあり、出現回数が多い順に要素を取得できます。

from collections import Counter

scores = [85, 90, 85, 70, 90, 85, 70, 90, 60, 85]

counter = Counter(scores)

# 出現回数が多い順に全要素を取得する
print(counter.most_common())
# [(85, 4), (90, 3), (70, 2), (60, 1)]

# 出現回数が多い上位2件を取得する
print(counter.most_common(2))
# [(85, 4), (90, 3)]

most_common()は引数を省略すると全要素を出現回数の降順で返し、引数に整数を指定すると上位N件のみを取得します。countメソッドが1つの値の出現回数を返すのに対し、Counterクラスは全要素の集計や出現頻度の順位付けが必要な場面に適しています。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

Pythonのリストのサイズ・長さ・要素数の違い

Pythonのリストに関する情報を調べると、「サイズ」「長さ」「要素数」という3つの用語が登場します。len関数で取得する値に限れば、これら3つは同じ意味を指しており、リストに含まれる要素の個数を返します。

一方で、sys.getsizeof関数で取得する「サイズ」は、リストオブジェクト自体がメモリ上で占有するバイト数を意味し、要素数とは全く異なる値です。ここでは、それぞれの違いを2つの観点から解説していきます。

  1. len関数が返すリストの長さと要素数の関係
  2. sys.getsizeofで取得するメモリサイズとの違い

それぞれの関数が返す値の意味を正確に把握することによって、用語の混同を防げます。それでは各項目について、詳しく解説していきます。

len関数が返すリストの長さと要素数の関係

Pythonの公式ドキュメントでは、len関数について以下のように定義しています。この定義の通り、len関数が返す「length(長さ)」と「number of items(要素の数)」は同一の値です。

Return the length (the number of items) of an object. The argument may be a sequence (such as a string, bytes, tuple, list, or range) or a collection (such as a dictionary, set, or frozen set).

出典:Python公式ドキュメント - Built-in Functions - len()

日本語では「リストのサイズを取得したい」「リストの長さを知りたい」「リストの要素数を調べたい」と検索されますが、いずれもlen関数で解決できます。ただし、Python公式の用語ではlenは「length」と「number of items」を返すと定義されており、「size」という語は使われていません。Pythonではsys.getsizeofがメモリサイズ(バイト単位)を返す別の関数として存在するため、「サイズ」という語は文脈によって意味が異なる点に注意が必要です。以下のコードで、len関数が返す値を確認してみましょう。

fruits = ["apple", "banana", "cherry", "date", "elderberry"]

# len関数は「長さ」=「要素数」を返す
print(len(fruits))  # 5

日本語圏では「サイズ」「長さ」「要素数」が同じ意味で使われることが多いですが、前述の通りsys.getsizeofによるメモリサイズとは別概念です。

sys.getsizeofで取得するメモリサイズとの違い

sys.getsizeof関数は、Pythonオブジェクトがメモリ上で占有するバイト数を返す関数です。len関数が返す「要素の個数」とは意味が異なり、そのオブジェクトに直接帰属するメモリ消費量を示します。

Return the size of an object in bytes. The object can be any type of object. All built-in objects will return correct results, but this does not have to hold true for third-party extensions as it is implementation specific.

出典:Python公式ドキュメント - sys.getsizeof()

以下のサンプルコードで、len関数とsys.getsizeof関数の返す値を比較してみましょう。

import sys

numbers = [1, 2, 3, 4, 5]

# len関数: 要素の個数を返す
element_count = len(numbers)
print(f"要素数: {element_count}")

# sys.getsizeof: メモリサイズ(バイト単位)を返す
memory_size = sys.getsizeof(numbers)
print(f"メモリサイズ: {memory_size} bytes")

# 要素数を増やしてメモリサイズの変化を確認
numbers_large = list(range(100))
print(f"\n要素数100のリスト:")
print(f"要素数: {len(numbers_large)}")
print(f"メモリサイズ: {sys.getsizeof(numbers_large)} bytes")

実行環境(CPython/PyPy32bit/64bit、Pythonバージョン)によって具体的なバイト数は異なりますが、要素数5のリストでもメモリサイズは数十〜百数十バイト程度の値を返します。要素数が5であるのに対し、メモリサイズはそれよりはるかに大きな数値を返すため、両者が全く異なる情報であることがわかります。

なお、sys.getsizeofはリストオブジェクト自体のサイズのみを返し、各要素が参照しているオブジェクトのサイズは含みません。リスト全体の総メモリ使用量を正確に把握したい場合は、各要素のサイズも個別に計測する必要があります。

Pythonのリストの要素数に関するよくある質問

配列(list)の数をlen以外で取得する方法はありますか?

len()関数以外にも、for文とカウンタ変数を組み合わせてリストの要素数を取得する方法があります。以下のコードでは、ループで1要素ずつカウントしています。

my_list = [10, 20, 30, 40, 50]
count = 0
for _ in my_list:
    count += 1
print(count)  # 5

上記の方法でも要素数は取得できますが、len()関数のほうがコードが短く処理速度も速いため、通常はlen()の使用を推奨します。

辞書やタプルでもlen関数を使えますか?

len()関数はリストだけではなく、辞書やタプル、文字列、セットなど多くのデータ型に対応しています。以下のコードで各データ型の要素数を取得できます。

print(len((1, 2, 3)))        # タプル: 3
print(len({"a": 1, "b": 2})) # 辞書: 2
print(len("hello"))           # 文字列: 5
print(len({1, 2, 3, 4}))     # セット: 4

辞書の場合はキーの数が返され、文字列の場合は文字数が返されます。

空のリストでlen関数を使うとどうなりますか?

空のリストにlen()関数を使うと、エラーは発生せず0が返されます。ただし、Noneを渡すとTypeErrorが発生するため注意が必要です。

print(len([]))    # 0
# print(len(None))  # TypeError: object of type 'NoneType' has no len()

変数が空かどうかを判定するだけなら、Pythonではif my_list:と書くのが一般的です。この書き方は空リストとNoneの両方をFalsyとして判定します。空リストとNoneを明確に区別する必要がある場合は、if my_list is not None:Noneでないことを確認した上でlen()を使用してください。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する