テクノロジー 開発 非公開: Python len() 関数: 構文、例、使用例

Python len() 関数: 構文、例、使用例

Python の反復可能オブジェクトを操作する場合、反復可能オブジェクトに含まれる項目の数を見つけるのは一般的な操作です。 Python の組み込み len を使用してイテラブルの長さなどを確認する方法を学びます。

Python は、一連の組み込みデータ構造と、それらを操作するための一連のメソッドを提供します。さらに、これらのデータ構造を操作するときに便利な組み込み関数があります。そのような関数の 1 つは、反復可能内に存在する項目の数を与える len() です。

このチュートリアルでは、リスト、タプル、文字列などで len() 関数を使用する方法を学びます。また、いくつかの一般的な使用例も見ていきます。

始めましょう!👩‍🏫

Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Python len() 関数の構文

Python の len 関数を使用する構文は次のとおりです。

 len(iterable)

ご覧のとおり、 len() 関数には 1 つのパラメータ ( 有効な iterable ) が必要です 。反復可能は、多くの場合、リスト、タプル、または文字列のいずれかです。ただし、他の有効なタイプにすることもできます。

len() 関数を使用する構文は非常に単純であることがわかります。次に、いくつかの例のコーディングに進みましょう。

📑 このチュートリアルのコード例については、Python REPL でコーディングできます。

Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Iterables での len() 関数の使用

Iterables での len 関数の使用
Iterables での len 関数の使用

シーケンスあり

len() 関数を使用すると、リスト、タプル、文字列などの反復可能オブジェクトの長さを見つけることができます。

以下に例を示します。

 >>> nums = [9,3,6,1,2]
>>> len(nums)
5

>>> nums_tup = (9,3,6,1,2)
>>> len(nums_tup)
5

シーケンスを格納するこれらのデータ構造では、通常、インデックスを使用して要素にアクセスするか、必要に応じてスライス (サブシーケンス) を取得します。

他のコレクションと一緒に

セットや辞書などの他の Python コレクションで len() 関数を使用することもできます。

これらのデータ構造は順序付けされていないコレクションです。アイテムの順序には興味がないかもしれませんが、コレクション内のアイテムの総数を取得することは役に立ちます。

 >>> nums_set = set(nums)
>>> len(nums_set)
5

>>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8}
>>> len(prices)
5
Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Python len() 関数の一般的な使用例

これまで、 len() 関数を使用して反復可能な項目の数を取得する簡単な例を見てきました。では、これを実際にどこで使用できるかを見てみましょう。

#1. For ループを使用した反復

Python for ループは、反復可能構文の項目の反復可能をループする構造を提供します。ただし、項目自体ではなく各項目のインデックスにアクセスしたい場合、またはインデックスと項目の両方にアクセスしたい場合は、次のように range() 関数を使用できます。

 >>> nums = [9,2,4,7,8]
>>> for i in range(len(nums)):
...      print(f"Index {i}: {nums[i]}")

range(N) は一連の整数 0、1、2、…、N – 1 を与えるため、 range(len(nums)) を使用すると、ループする有効なインデックスのセットが得られます。

 # Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

ただし、インデックスと要素の両方にアクセスするための Python の推奨方法は、 enumerate 関数を使用することです。

 >>> nums = [9,2,4,7,8]
>>> for idx,num in enumerate(nums):
...     print(f"Index {idx}: {num}")
 # Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8 

#2. While ループを使用した条件付きループ

数値 nums のリストがあるとします。リスト メソッド pop() リストの最後の項目を削除して返します。

nums リスト len(nums) の長さがゼロより大きい限り、削除できる要素が少なくとも 1 つあります。

 >>> nums = [9,2,4,7,8]
>>> while len(nums) > 0:
...     nums.pop()
 # Output
8
7
4
2
9

上記の例は、以下をより明示的に記述する方法です。

 >>> nums = [9,2,4,7,8]
>>> while nums:
...     nums.pop()

while nums: 、「nums リストが空ではない間」という 条件と同等です。

#3. Iterable の長さのチェックと検証

len 関数のもう 1 つの一般的な用途は、特定の反復可能オブジェクトの長さをチェックおよび検証することです。

ここでは、 username 長さ ( len() 関数を使用して計算) に基づいて有効な文字列であるかどうかを確認します。

 >>> username = "another-random-user"
>>> if len(username) > 10:
...     print("Username too long; should be 10 characters long at max.")
... elif len(username) < 5:
...     print("Username too short; should be at least 5 characters long.")
... else:
...     print("Valid username!")
 Username too long; should be 10 characters long at max. 

#4. リストと辞書の内包表記

Python の内包表記は、既存の反復可能オブジェクトから新しい反復可能オブジェクトを構築するための簡潔な構文を提供します。内包表現で組み込み関数を使用できます。

リストの内包表記

このリスト内包表記では、 len() 関数を使用して、 languages リスト内の各文字列の長さを取得します。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> len_langs = [len(lang) for lang in languages]
>>> len_langs
[6, 1, 4, 10] 

辞書の理解

この辞書内包では、 languages リストと len() 関数を使用して辞書を構築します。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> lang_len = {lang:len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

ここで、キーと値はそれぞれ言語文字列と言語文字列の長さです。

#5. カスタム並べ替えのキーパラメータ

Python には、Python リストを適切にソートするための組み込みの sort() メソッドと、リストやその他の反復可能オブジェクトをソートするためのsorted() 関数があります。

どちらの場合も、 key パラメーターを使用して並べ替えをカスタマイズできます。

ここでは、文字列の長さに基づいて languages リストを並べ替えます。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> languages.sort(key=len)
>>> languages
['C', 'Rust', 'Python', 'JavaScript']

以下のスニペットでは、 sorted() 関数を使用して並べ替えられたリストを取得します。

 >>> languages = ['Hindi','English','German','French']
>>> sorted(languages,key=len)
['Hindi', 'German', 'French', 'English']

この例では、「ドイツ語」と「フランス語」の両方にそれぞれ 6 文字が含まれています。 sorted() 関数は安定した並べ替えを実行するため、元のリストの順序が保持されます。

#6. NumPy 配列の長さ

NumPy 配列 などの他のデータ構造で len() 関数を使用することもできます。

 >>> import numpy as np
>>> np_array = np.array([3,4,6,9])
>>> type(np_array)
<class 'numpy.ndarray'>
>>> len(np_array)
4

この場合、 np_array 4 つの要素を持つベクトルです。したがって、 len(np_array) 配列内に存在する要素の数である 4 を返します。

行列は 2 次元配列です。

次の例を考えてみましょう。 len(np_array) は 2、つまり行数です。

 >>> matrix = [[1,2,3],[4,5,6]]
>>> np_array = np.array(matrix)
>>> np_array
array([[1, 2, 3],
       [4, 5, 6]])
>>> len(np_array)
2

理解するために、 matrix に戻りましょう。ネストされたリスト構造があり、外側のリストには 2 つの ネストされたリストが含まれています。そして、 len() 関数は、コンテナー内の項目の数を返します (ここでは、2 つのリストです)。

 >>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

ただし、多次元配列の操作を開始する場合は、代わりに shape 属性を使用することをお勧めします。

 >>> np_array.shape
(2, 3)

Python の len() 関数を使用するときに避けるべき一般的な落とし穴

落とし穴
落とし穴

議論の締めくくりとして、Python で len 関数を使用する際に避けるべき一般的な落とし穴についていくつか見ていきましょう。

反復不可能なデータ型での len() の使用

len 関数は有効な iterable のみを引数として受け取ることがわかっています。つまり、反復不可能な無効なデータ型を使用して len 関数を呼び出すと、エラーが発生します。

このような無効な型には、整数、浮動小数点数、ブール値などの基本的なデータ型が含まれます。

 >>> len(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

>>> len(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'bool' has no len()

>>> len(3.14)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'float' has no len()

Python では、シーケンスの生成が必要なユースケースでは、ジェネレーターはメモリ効率の高い選択肢となります。ジェネレーター オブジェクトは、シーケンスの要素をオンデマンドで一度に 1 要素ずつ返します。ただし、ジェネレーター オブジェクトには長さがありません。

したがって、ジェネレーター オブジェクトの長さを計算しようとすると、エラーが発生します。

 >>> nums_sq = (i*i for i in range(10))
>>> nums_sq
<generator object <genexpr> at 0x0157DBC0>
>>> len(nums_sq)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'generator' has no len()

長さ 1 のタプルで len() を使用する

要素をタプルに挿入するだけの場合、Python はそれをタプルではなく単一の要素として解釈します。

以下に例を示します。

 >>> nums = (1)
>>> len(nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

したがって、要素が 1 つだけ含まれるタプルがある場合は、タプルとして解釈されるように、 tuple_name = (elt, ) の形式で初期化します。

 >>> nums = (1,)
>>> len(nums)
1

まとめ

このチュートリアルで説明した内容の要約は次のとおりです。

  • Python の len() 関数を使用すると、反復可能オブジェクト内の項目の数を見つけることができます。長さ関数を使用する構文は、 len(any-valid-iterable) です。
  • これには、リスト、タプル、文字列などのシーケンスが含まれます。辞書やセットなどのその他のコレクション。
  • len() 関数はループと内包表記でよく使用されます。
  • 長さに応じて並べ替えをカスタマイズする必要がある場合は、 len() 関数をキー パラメーターとして使用することもできます。例: 文字列のリストを長さに基づいて並べ替えます。

次に、Python の sum() 関数の使用方法を学びます。

「 Python len() 関数: 構文、例、使用例」についてわかりやすく解説!絶対に観るべきベスト2動画

【Pythonプログラミング入門】for文で使うと便利な関数、tqdm, zip, enumerateを解説!〜VTuberと学習〜 【初心者向け】
len()関数がオブジェクトの長さを手にいれる仕組み (Takayuki Shimizukawa) – PyCon JP 2017

Python の反復可能オブジェクトを操作する場合、反復可能オブジェクトに含まれる項目の数を見つけるのは一般的な操作です。 Python の組み込み len を使用してイテラブルの長さなどを確認する方法を学びます。

Python は、一連の組み込みデータ構造と、それらを操作するための一連のメソッドを提供します。さらに、これらのデータ構造を操作するときに便利な組み込み関数があります。そのような関数の 1 つは、反復可能内に存在する項目の数を与える len() です。

このチュートリアルでは、リスト、タプル、文字列などで len() 関数を使用する方法を学びます。また、いくつかの一般的な使用例も見ていきます。

始めましょう!👩‍🏫

Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Python len() 関数の構文

Python の len 関数を使用する構文は次のとおりです。

 len(iterable)

ご覧のとおり、 len() 関数には 1 つのパラメータ ( 有効な iterable ) が必要です 。反復可能は、多くの場合、リスト、タプル、または文字列のいずれかです。ただし、他の有効なタイプにすることもできます。

len() 関数を使用する構文は非常に単純であることがわかります。次に、いくつかの例のコーディングに進みましょう。

📑 このチュートリアルのコード例については、Python REPL でコーディングできます。

Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Iterables での len() 関数の使用

Iterables での len 関数の使用
Iterables での len 関数の使用

シーケンスあり

len() 関数を使用すると、リスト、タプル、文字列などの反復可能オブジェクトの長さを見つけることができます。

以下に例を示します。

 >>> nums = [9,3,6,1,2]
>>> len(nums)
5

>>> nums_tup = (9,3,6,1,2)
>>> len(nums_tup)
5

シーケンスを格納するこれらのデータ構造では、通常、インデックスを使用して要素にアクセスするか、必要に応じてスライス (サブシーケンス) を取得します。

他のコレクションと一緒に

セットや辞書などの他の Python コレクションで len() 関数を使用することもできます。

これらのデータ構造は順序付けされていないコレクションです。アイテムの順序には興味がないかもしれませんが、コレクション内のアイテムの総数を取得することは役に立ちます。

 >>> nums_set = set(nums)
>>> len(nums_set)
5

>>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8}
>>> len(prices)
5
Python len() 関数: 構文、例、使用例
Python len() 関数: 構文、例、使用例

Python len() 関数の一般的な使用例

これまで、 len() 関数を使用して反復可能な項目の数を取得する簡単な例を見てきました。では、これを実際にどこで使用できるかを見てみましょう。

#1. For ループを使用した反復

Python for ループは、反復可能構文の項目の反復可能をループする構造を提供します。ただし、項目自体ではなく各項目のインデックスにアクセスしたい場合、またはインデックスと項目の両方にアクセスしたい場合は、次のように range() 関数を使用できます。

 >>> nums = [9,2,4,7,8]
>>> for i in range(len(nums)):
...      print(f"Index {i}: {nums[i]}")

range(N) は一連の整数 0、1、2、…、N – 1 を与えるため、 range(len(nums)) を使用すると、ループする有効なインデックスのセットが得られます。

 # Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

ただし、インデックスと要素の両方にアクセスするための Python の推奨方法は、 enumerate 関数を使用することです。

 >>> nums = [9,2,4,7,8]
>>> for idx,num in enumerate(nums):
...     print(f"Index {idx}: {num}")
 # Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8 

#2. While ループを使用した条件付きループ

数値 nums のリストがあるとします。リスト メソッド pop() リストの最後の項目を削除して返します。

nums リスト len(nums) の長さがゼロより大きい限り、削除できる要素が少なくとも 1 つあります。

 >>> nums = [9,2,4,7,8]
>>> while len(nums) > 0:
...     nums.pop()
 # Output
8
7
4
2
9

上記の例は、以下をより明示的に記述する方法です。

 >>> nums = [9,2,4,7,8]
>>> while nums:
...     nums.pop()

while nums: 、「nums リストが空ではない間」という 条件と同等です。

#3. Iterable の長さのチェックと検証

len 関数のもう 1 つの一般的な用途は、特定の反復可能オブジェクトの長さをチェックおよび検証することです。

ここでは、 username 長さ ( len() 関数を使用して計算) に基づいて有効な文字列であるかどうかを確認します。

 >>> username = "another-random-user"
>>> if len(username) > 10:
...     print("Username too long; should be 10 characters long at max.")
... elif len(username) < 5:
...     print("Username too short; should be at least 5 characters long.")
... else:
...     print("Valid username!")
 Username too long; should be 10 characters long at max. 

#4. リストと辞書の内包表記

Python の内包表記は、既存の反復可能オブジェクトから新しい反復可能オブジェクトを構築するための簡潔な構文を提供します。内包表現で組み込み関数を使用できます。

リストの内包表記

このリスト内包表記では、 len() 関数を使用して、 languages リスト内の各文字列の長さを取得します。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> len_langs = [len(lang) for lang in languages]
>>> len_langs
[6, 1, 4, 10] 

辞書の理解

この辞書内包では、 languages リストと len() 関数を使用して辞書を構築します。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> lang_len = {lang:len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

ここで、キーと値はそれぞれ言語文字列と言語文字列の長さです。

#5. カスタム並べ替えのキーパラメータ

Python には、Python リストを適切にソートするための組み込みの sort() メソッドと、リストやその他の反復可能オブジェクトをソートするためのsorted() 関数があります。

どちらの場合も、 key パラメーターを使用して並べ替えをカスタマイズできます。

ここでは、文字列の長さに基づいて languages リストを並べ替えます。

 >>> languages = ['Python','C','Rust','JavaScript']
>>> languages.sort(key=len)
>>> languages
['C', 'Rust', 'Python', 'JavaScript']

以下のスニペットでは、 sorted() 関数を使用して並べ替えられたリストを取得します。

 >>> languages = ['Hindi','English','German','French']
>>> sorted(languages,key=len)
['Hindi', 'German', 'French', 'English']

この例では、「ドイツ語」と「フランス語」の両方にそれぞれ 6 文字が含まれています。 sorted() 関数は安定した並べ替えを実行するため、元のリストの順序が保持されます。

#6. NumPy 配列の長さ

NumPy 配列 などの他のデータ構造で len() 関数を使用することもできます。

 >>> import numpy as np
>>> np_array = np.array([3,4,6,9])
>>> type(np_array)
<class 'numpy.ndarray'>
>>> len(np_array)
4

この場合、 np_array 4 つの要素を持つベクトルです。したがって、 len(np_array) 配列内に存在する要素の数である 4 を返します。

行列は 2 次元配列です。

次の例を考えてみましょう。 len(np_array) は 2、つまり行数です。

 >>> matrix = [[1,2,3],[4,5,6]]
>>> np_array = np.array(matrix)
>>> np_array
array([[1, 2, 3],
       [4, 5, 6]])
>>> len(np_array)
2

理解するために、 matrix に戻りましょう。ネストされたリスト構造があり、外側のリストには 2 つの ネストされたリストが含まれています。そして、 len() 関数は、コンテナー内の項目の数を返します (ここでは、2 つのリストです)。

 >>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

ただし、多次元配列の操作を開始する場合は、代わりに shape 属性を使用することをお勧めします。

 >>> np_array.shape
(2, 3)

Python の len() 関数を使用するときに避けるべき一般的な落とし穴

落とし穴
落とし穴

議論の締めくくりとして、Python で len 関数を使用する際に避けるべき一般的な落とし穴についていくつか見ていきましょう。

反復不可能なデータ型での len() の使用

len 関数は有効な iterable のみを引数として受け取ることがわかっています。つまり、反復不可能な無効なデータ型を使用して len 関数を呼び出すと、エラーが発生します。

このような無効な型には、整数、浮動小数点数、ブール値などの基本的なデータ型が含まれます。

 >>> len(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

>>> len(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'bool' has no len()

>>> len(3.14)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'float' has no len()

Python では、シーケンスの生成が必要なユースケースでは、ジェネレーターはメモリ効率の高い選択肢となります。ジェネレーター オブジェクトは、シーケンスの要素をオンデマンドで一度に 1 要素ずつ返します。ただし、ジェネレーター オブジェクトには長さがありません。

したがって、ジェネレーター オブジェクトの長さを計算しようとすると、エラーが発生します。

 >>> nums_sq = (i*i for i in range(10))
>>> nums_sq
<generator object <genexpr> at 0x0157DBC0>
>>> len(nums_sq)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'generator' has no len()

長さ 1 のタプルで len() を使用する

要素をタプルに挿入するだけの場合、Python はそれをタプルではなく単一の要素として解釈します。

以下に例を示します。

 >>> nums = (1)
>>> len(nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

したがって、要素が 1 つだけ含まれるタプルがある場合は、タプルとして解釈されるように、 tuple_name = (elt, ) の形式で初期化します。

 >>> nums = (1,)
>>> len(nums)
1

まとめ

このチュートリアルで説明した内容の要約は次のとおりです。

  • Python の len() 関数を使用すると、反復可能オブジェクト内の項目の数を見つけることができます。長さ関数を使用する構文は、 len(any-valid-iterable) です。
  • これには、リスト、タプル、文字列などのシーケンスが含まれます。辞書やセットなどのその他のコレクション。
  • len() 関数はループと内包表記でよく使用されます。
  • 長さに応じて並べ替えをカスタマイズする必要がある場合は、 len() 関数をキー パラメーターとして使用することもできます。例: 文字列のリストを長さに基づいて並べ替えます。

次に、Python の sum() 関数の使用方法を学びます。

「 Python len() 関数: 構文、例、使用例」についてわかりやすく解説!絶対に観るべきベスト2動画

【Pythonプログラミング入門】for文で使うと便利な関数、tqdm, zip, enumerateを解説!〜VTuberと学習〜 【初心者向け】
len()関数がオブジェクトの長さを手にいれる仕組み (Takayuki Shimizukawa) – PyCon JP 2017