Python で複数のリストとタプルからタプルのリストを作成する
複数のリストとタプルを操作する場合、オブジェクト内に存在する値を組み合わせる必要があることがよくあります。このアプローチにより、それらの反復が非常に簡単になります。Python を使用して Web アプリケーションまたは API を開発する場合、ほとんどの場合、このアプローチに従って、欠落している値がないことを確認します。さらに、HTML テンプレート内でこれらの値を反復処理することが非常に重要になります。
この記事では、Python で複数のリストからタプルとタプルのリストを作成する方法を学習します。
Python で複数のリストとタプルからタプルのリストを手動で作成する
複数のリストおよびタプルからタプルのリストを作成する最も基本的なアプローチは、スタブまたはユーティリティ関数を自分で作成することです。この関数は、複数のリストとタプルを受け入れ、タプルのリストを返します。リストを反復処理する間、ロジックは、すべてのリストの中で最小の長さのみを考慮し、そのインデックスまでの要素のみを追加するようにする必要があります。次の Python コードは、説明したアプローチを実装しています。
def convert(*args):
"""
Returns a list of tuples generated from multiple lists and tuples
"""
for x in args:
if not isinstance(x, list) and not isinstance(x, tuple):
return []
size = float("inf")
for x in args:
size = min(size, len(x))
result = []
for i in range(size):
result.append(tuple([x[i] for x in args]))
return result
a = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8]
b = ["H", "E", "L", "L", "O"]
c = [True, False, False, True, True, True]
d = [100, 200, 300, 400]
result = convert(a, b, c, d)
print(result)
出力:
[(1.1, 'H', True, 100), (2.2, 'E', False, 200), (3.3, 'L', False, 300), (4.4, 'L', True, 400)]
convert()
関数は、引数として複数のリストとタプルを受け入れます。まず、渡された各引数が list
または tuple
のインスタンスであるかどうかをチェックします。そうでない場合は、空のリストを返します。次に、すべてのリストとタプルの中で最小の長さ、たとえば n
を見つけます。この操作により、IndexError
例外が発生しないようになります。
最小サイズが見つかると、convert()
関数は空のリストを作成し、すべての引数を n
回繰り返します。反復ごとにタプルが作成され、前に作成された空のリストに追加されます。反復が完了すると、タプルのリストが回答として返されます。
引数の数を n
、最小の長さを m
とすると、上記の関数の時間計算量は O(m * n)
であり、空間計算量も O(m * n)
です。結果を作成する二重ネストされた for
ループのため、時間計算量は O(m * n)
です。
Python の zip()
メソッドを使用して、複数のリストとタプルからタプルのリストを作成する
zip()
関数は、Python の組み込みユーティリティ関数です。リストやタプルなどの複数の反復可能なオブジェクトを受け入れ、反復可能なオブジェクトを返します。この zip
オブジェクトは、要素をタプルのリストとして格納します。zip()
関数の実装は、前のセクションで実装した convert()
関数と似ていますが、正確ではありません。
zip()
関数によって返される値は、反復可能な zip オブジェクト
です。出力すると、出力は次のようになります。
<zip object at 0x7fee6d0628c0>
理論が完成したので、ユースケースで zip()
メソッドを使用する方法を理解しましょう。同じことについては、次のコードを参照してください。
a = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8]
b = ("H", "E", "L", "L", "O")
c = [True, False, False, True, True, True]
d = [100, 200, 300, 400]
result = zip(a, b, c, d)
for x in result:
print(x)
出力:
(1.1, 'H', True, 100)
(2.2, 'E', False, 200)
(3.3, 'L', False, 300)
(4.4, 'L', True, 400)
関連記事 - Python List
- Python でリストから要素の出現をすべて削除する
- Python で辞書をリストに変換する
- Python でリストから重複を削除する
- Python でリストの平均を取得する方法
- リストメソッドの追加と拡張の違いは何ですか
- Python でリストを文字列に変換する方法