Pythonでリストの形状を取得する

Muhammad Maisam Abbas 2023年9月19日
  1. Pythonで1次元リストの形状を取得するために、len()関数を使用する
  2. Pythonでネストされたリストの形状を取得するためにリスト内包表記とlen()関数を使用する
  3. Pythonで多次元リストの形状を取得するためにNumPyを使用する
  4. Pythonで不規則にネストされたリストの形状を取得するために再帰を使用する
  5. 結論
Pythonでリストの形状を取得する

Pythonでは、リストの形状を理解することは、特に多次元またはネストされたリストを扱う場合に重要です。本記事では、Pythonでリストの形状を決定するためのさまざまな方法について説明します。単純な1次元リストから複雑な多次元または不規則にネストされたリストまで対応しています。

Pythonで1次元リストの形状を取得するために、len()関数を使用する

Pythonでリストの形状を得る最もシンプルな方法は、len()関数を使用することです。この関数はリストの長さ(要素の数)を提供し、第1次元のサイズを返します。

len()関数は次のようなシンプルで簡潔な構文を持っています:

len(object)

objectは、長さを判定したいオブジェクトです。シーケンス(リスト、タプル、文字列など)またはコレクション(辞書やセットなど)になります。

以下のコード例では、Pythonでリストの形状を取得するためにlen()メソッドをどのように使用するかを示しています。

my_list = [1, 2, 3, 4, 5]
length = len(my_list)
print("Length of the list:", length)

出力:

Length of the list: 5

この例では、my_listのリストの長さが計算され、コンソールに出力されます。

Pythonでネストされたリストの形状を取得するためにリスト内包表記とlen()関数を使用する

フラット(1次元)リストの長さを判定するだけでなく、ネストされたリスト(2次元または高次元のリスト)の形状を判定するには、len()関数を使用できます。

以下の例では、2次元のネストされたリストの行数と列数を判定します。

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
num_rows = len(nested_list)
# Assuming all sublists have the same number of columns
num_cols = len(nested_list[0])
print(f"Number of rows: {num_rows}, Number of columns: {num_cols}")

出力:

Number of rows: 3, Number of columns: 3

ここでは、num_rowsは行数(サブリストの数)、そしてnum_colsはネストされたリスト内の列数(各サブリスト内の要素数)を表します。

Pythonで多次元リストの形状を取得するためにNumPyを使用する

多次元リストでコードを動作させたい場合は、NumPyの.shape属性を使用することができます。これは配列の各次元の要素数を含んだタプルを返します。

NumPyパッケージは、元々配列と共に使用するために設計されていましたが、リストでも動作します。NumPyは外部パッケージであり、Pythonとは事前にインストールされていないため、使用する前にインストールする必要があります。

NumPyパッケージをインストールするコマンドは以下の通りです。

pip install numpy

以下のコード例では、NumPyを使用して多次元リストの形状を取得する方法を示しています。

import numpy as np

my_array = np.array([[1, 2, 3], [4, 5, 6]])
num_rows, num_cols = my_array.shape
print(f"Number of rows: {num_rows}, Number of columns: {num_cols}")

出力:

Number of rows: 2, Number of columns: 3

ここでは、NumPy配列my_arrayを作成し、その形状を.shape属性を使用して取得しています。この方法は多次元配列に対してシームレスに機能し、行数と列数の両方を提供します。

Pythonで不規則にネストされたリストの形状を取得するために再帰を使用する

場合によっては、ネストの深さが異なり、サブリストの長さが異なる不規則にネストされたリストに遭遇することがあります。そのようなシナリオを扱うには、再帰的な関数を使用することができます。

def get_shape(data):
    if isinstance(data, list):
        return [len(data)] + get_shape(data[0])
    else:
        return []  # Assuming leaf elements are considered as a single column


nested_list = [[1, 2], [3, 4, 5], [6, [7, 8]]]
shape = get_shape(nested_list)
num_rows, num_cols = shape
print(f"Number of rows: {num_rows}, Number of columns: {num_cols}")

出力:

Number of rows: 3, Number of columns: 2

get_shape()関数は、再帰的にネストされたリストをナビゲートし、各次元の行数を数え、葉要素を単一の列として扱います。このアプローチは不規則にネストされたリストの行数と列数の両方を提供します。

結論

Pythonで1次元リストの形状を取得する最も簡単な方法は、len()関数を使用することです。ネストされたリストの場合、リスト内包表記とlen()関数を使用して、効果的に行数と列数を判定することができます。

多次元配列を含むより高度なシナリオでは、NumPyの.shape属性は行数と列数を簡単に取得する便利な方法を提供します。最後に、ネストの深度と長さが異なる不規則にネストされたリストを扱う場合は、再帰的な関数を使用して正確な形状を判定することができます。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Python List