Pythonでリストに格納されているデータ数を把握したい場面は、ループ処理の準備や空かどうかの判定など、データ処理の実装で頻繁に発生します。要素数やデータ量を調べる手段としてよく使われるのが「len関数」や「sysモジュール」で、格納された個数の確認やメモリ使用量の取得を簡単に実現可能です。
この記事では、Pythonのリストにおけるデータサイズの基本的な確認方法を解説していきます。データ個数のカウントだけではなく、大規模データで気になるバイト単位のメモリ確認方法など、サンプルコード付きで解説していきますので、ぜひ参考にしてください。
Pythonでlistのサイズを取得する方法
Pythonのリストにおけるデータ量を確認するには、用途に合わせて適切な関数を使い分けるのが基本となります。代表的な取得方法は以下の3つです。
- len()関数で要素数や長さを取得する
- sys.getsizeof()でメモリ使用量を確認する
- リストが空かどうか判定する
これらの関数を理解することによって、目的に応じた適切なサイズ確認が可能です。それぞれの使い方について、順番に見ていきましょう。
len()関数で要素数や長さ(length)を取得する
リストや配列に入っているデータの個数(length)を数える際には、組み込みのlen()関数を使用します。この関数は引数に渡したオブジェクトの長さを返す仕組みです。
リストのデータ個数を取得する基本的な使い方は、以下の通りです。
my_list = [1, 2, 3, 4, 5]
list_length = len(my_list)
print(list_length) # 出力: 5
上記のコードでは、5つの整数が含まれたリストを定義し、その要素数を取得しています。処理結果として変数には5が代入され、画面に出力されるという流れです。
この処理は内部的に定数時間で動作するため、要素が非常に多い場合でも高速に個数を取得できます。また、個数が0であるかを確認して、中身が空かどうかの判定に利用することも可能です。
sys.getsizeof()でメモリ使用量を確認する
要素数ではなく、リストオブジェクト自体が消費しているメモリのバイト数を調べたい場合は、sysモジュールのgetsizeof()関数を活用します。大規模なデータを扱う際のメモリチューニングなどに役立ちます。
メモリ使用量を確認する具体的なコードは、以下の通りです。
import sys
my_list = [1, 2, 3, 4, 5]
memory_size = sys.getsizeof(my_list)
print(memory_size) # 出力例: 104 (CPython 3.12 / 64bit環境。バージョンや環境により異なります)
上記のコードでは、sysモジュールをインポートしてから対象のリストを引数に渡しています。実行すると、リスト自体がメモリ上で占有しているバイト単位の容量を取得可能です。
ここで得られる数値はリストというコンテナ自体のサイズであり、各要素への参照(ポインタ)のサイズは含みますが、参照先オブジェクト自体のデータ本体は含まない仕様です。GC(ガベージコレクタ)が管理するオブジェクトでは、getsizeof()は常に__sizeof__()より大きい値を返す点にも注意が必要です。
厳密な全体メモリを計算したい場合は、要素ごとのサイズも個別に取得して加算するアプローチが求められます。リスト内の各要素に対してgetsizeof()を適用し、合算することによって、実際のメモリ消費量をより正確に見積もることが可能です。
リストが空かどうか判定する
リストにデータが入っているか、空であるかを判定する際にも、len()関数が役立つ場面は多いです。取得した要素数が0と等しいかを条件分岐で確認する手法と、Pythonの真偽値評価を利用する手法の2つがあります。
空かどうかを判定するコード例は、以下の通りです。
empty_list = []
# PEP 8推奨の書き方(Correct)
if not empty_list:
print("リストは空です")
else:
print("データが存在します")
# 明示的に長さで比較する方法(PEP 8では非推奨・Pythonらしくない書き方)
if len(empty_list) == 0:
print("リストは空です")
上記のコードでは、if not empty_list:とif len(empty_list) == 0:の2つのアプローチを示しています。空リストの判定には両方とも使えますが、公式が推奨しているのは前者の書き方です。
Python公式のコーディング規約であるPEP 8では、空のシーケンスの判定について、次のように述べています。
For sequences, (strings, lists, tuples), use the fact that empty sequences are falsy.
出典:PEP 8 Programming Recommendations
つまり、if not seq:を「Correct」、if len(seq):形式を「Wrong」と明示しており、空判定には暗黙の真偽値評価を使う方法が推奨されています。len()を使った比較はPythonらしくない書き方として非推奨です。
Pythonリスト内の特定の要素の数を数える
Pythonでリストの全体のデータ数ではなく、特定の値がいくつ含まれているかを数える場合は、専用のメソッドや内包表記を活用します。
特定の要素を抽出したり、条件に一致するデータを集計したりする処理は、データ分析などで頻繁に必要となる操作です。
特定の要素の数を数える主な方法は、以下の通りです。
- count()メソッドを使用する
- 条件を指定してカウントする
それぞれの手法とコード例について、詳しく解説します。目的に応じて使い分けることによって、効率よくデータを集計できます。
count()メソッドを使用する
リスト内に含まれる特定の値の出現回数を取得するには、Pythonの公式ドキュメント(シーケンス型)でも紹介されているcount()メソッドを使用します。引数にカウントしたい値を指定するだけで、リストの中から一致する要素の個数を返す仕組みです。
count()メソッドの基本的な使い方は、以下の通りです。
my_list = [1, 2, 2, 2, 4]
target_count = my_list.count(2)
print(target_count) # 出力結果: 3
上記のコードでは、リストの中から数値の2がいくつあるかを数えて結果を出力しています。リスト[1, 2, 2, 2, 4]に2が3つ含まれているため、3が出力されます。
文字列や他のデータ型が混在しているリストでも、完全に一致する要素だけを正確にカウントします。部分一致ではなく厳密な等価比較(==)で判定されるため、型が異なる値は別の要素として扱われる仕様です。
条件を指定してカウントする
特定の値との完全一致ではなく、一定の条件を満たす要素の数を数えたい場合は、リスト内包表記やジェネレータ式を組み合わせて処理します。
組み込み関数のsum()を併用することによって、条件式が真となる要素の個数を合計するアプローチが一般的です。
条件を指定してカウントするコード例は、以下の通りです。
numbers = [10, 20, 25, 30, 5, 15]
# 20以上の要素を数える
count_over_20 = sum(1 for x in numbers if x >= 20)
print(count_over_20) # 出力結果: 3
上記のコードでは、リスト[10, 20, 25, 30, 5, 15]の要素を順番に評価し、20以上(20・25・30の3件)という条件を満たした場合に1を足し合わせることで件数を取得しています。
複雑な条件分岐が必要な場面でも、この記法を活用すれば簡潔にコードを記述できます。filter()関数で条件抽出してからlen()で個数を取得する方法もありますが、ジェネレータ式とsum()の組み合わせの方がメモリ効率に優れています。
Pythonで多次元リストのサイズを確認する方法
Pythonで複雑なデータ構造を扱う際、多次元で構成されたリストの構造を正確に把握しておく必要があります。特にデータ分析などで用いられる多次元リストでは、行と列の数を適切に管理することが前提となります。
このセクションで解説する内容は、以下の通りです。
- 二次元リストのsizeを確認する
- NumPy配列の要素数を取得する
それぞれの確認方法について、具体的なコード例を交えて見ていきましょう。ネストされたリストの長さ(length)を正確に把握する手順を解説します。
二次元リストのsizeを確認する
Pythonの標準機能では、多次元リスト全体を一括で計測する専用のプロパティは用意されていない仕様です。そのため、リストの長さを取得するlen()関数を組み合わせて計算します。
二次元リスト全体の要素数をカウントする基本的な使い方は、以下の通りです。
matrix = [[1, 2, 3], [4, 5, 6]]
total_size = sum(len(row) for row in matrix)
print(total_size) # 6
上記のコードでは、内包表記を用いて各行の長さ(length)を取得し、合計値を算出しています。[[1, 2, 3], [4, 5, 6]]は2行3列の構造なので、合計6が出力される仕組みです。
リスト内に異なる長さのデータが含まれている場合でも、行ごとにlen()で個数を取得して合算するため、正確な要素数を把握できるのが特徴です。
なお、階層がさらに深くなる場合は、再帰関数などを活用して構造を解析する手法が効果的です。データの構造に合わせて適切なアプローチを選択するのがおすすめです。
NumPy配列のshapeと要素数を取得する
より高度な数値計算を行う場面では、NumPyライブラリを活用するケースが一般的です。NumPy配列(ndarray)を利用すると、shapeやsize属性から即座に構造を把握できます。
多次元の配列データで次元の構造と全体の個数を確認する使い方は、以下の通りです。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # (2, 3)
print(arr.size) # 6
上記のコードでは、shape属性で行数と列数のタプル(2, 3)を取得し、size属性で全体の要素数6を表示しています。リストのようにループ処理を記述する必要がないため、大規模なデータでも効率よく計算できる仕様です。
次元の構造を頻繁に確認する環境では、標準のリストよりもNumPyの導入を検討すると開発がスムーズに進むはずです。扱うデータの性質に合わせて使い分けてみましょう。
Pythonのlistサイズに関するよくある質問
len()関数はリスト以外のデータ型にも使えますか?
はい、len()関数は文字列やタプル、辞書など他のデータ型に対しても適用可能です。中身のデータ数を取得する際、内部的にオブジェクトが保持している長さ情報を参照するため、要素数に関係なく定数時間で素早く動作するのが特徴です。
Pythonのリストに格納できる要素数の上限はありますか?
リストに格納できる要素数には、実行環境のメモリ容量が実質的な制約となります。sys.maxsizeという定数がシーケンスの最大長を制約しており、64ビット環境では9,223,372,036,854,775,807(2の63乗マイナス1)です。
ただし、実際にはこの理論上限に達するはるか前にメモリが枯渇するため、利用可能な物理メモリがリストサイズの実質的な上限となります。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PythonをWebで実行する方法
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
株式会社HODL1がAI経営管理エージェントを提供開始、少人数での経営管理効率化を支援
株式会社サードスコープがKanataを発表、法人向けAI業務支援SaaSを展開
株式会社ナレッジセンスがChatSenseのPPTX出力機能を強化、資料修正負荷の軽減を支援
株式会社すららネットが「すらら」同時導入を公表、夜間中学で日本語学習と教科学習を支援
DUAL株式会社が空室通電DXと賃貸革命の連携を開始、空室時の通電管理効率化を推進
株式会社ITLINEがAWS生成AIシステム開発・運用を提供開始、企業管理型AI基盤の構築を支援
合同会社ウノマスがAI対応スコアを正式公開、LLMOとSEOの横断診断を支援
Markefan株式会社がmarke.aiを提供開始、BtoBマーケティングの属人化抑制を支援
株式会社FinatextがAIロールプレイング提供開始、金融機関の営業育成基盤構築を支援
株式会社アンドパッドがANDPAD ナレッジAIを提供開始、建設現場の情報検索と共有を支援
