【Python】リストの値を複数の変数に一括代入する3つの方法
プログラムの要件によっては、リストに格納された複数の値を一度に複数の変数へ代入し、以降の計算処理などで活用したい場面があります。本記事では、このような処理を実現するためのさまざまなアプローチを、サンプルコードと実行結果とともに紹介します。
for文(リスト内包表記)を使う方法
forループとリスト内包表記を組み合わせると、指定したインデックス位置の要素を順番に取り出しながら、宣言した変数へ代入できます。どのインデックスの値をどの変数に割り当てるかを明示的に指定できるのが特徴です。
サンプルコード
listA = ['Mon', ' 2pm', 1.5, '11 miles']
# 元のリスト
print("Given list A: " ,listA)
# for in を使用して代入
vDay, vHrs, vDist = [listA[i] for i in (0, 2, 3)]
# 結果の出力
print ("The variables : " + vDay + ", " + str(vHrs) + ", " +vDist)
実行結果
上記のコードを実行すると、以下のような結果が得られます。
Given list A: ['Mon', ' 2pm', 1.5, '11 miles'] The variables : Mon, 1.5, 11 miles
itemgetterを使う方法
operatorモジュールのitemgetter関数は、指定した複数のインデックスに対応する要素をまとめて取得します。取得した値は、そのまま複数の変数へ代入できます。
サンプルコード
from operator import itemgetter
listA = ['Mon', ' 2pm', 1.5, '11 miles']
# 元のリスト
print("Given list A: " ,listA)
# itemgetterを使用して代入
vDay, vHrs, vDist = itemgetter(0, 2, 3)(listA)
# 結果の出力
print ("The variables : " + vDay + ", " + str(vHrs) + ", " +vDist)
実行結果
上記のコードを実行すると、以下のような結果が得られます。
Given list A: ['Mon', ' 2pm', 1.5, '11 miles'] The variables : Mon, 1.5, 11 miles
itertools.compressを使う方法
itertoolsモジュールのcompress関数は、ブール値(フラグ)をもとに要素を選択します。インデックス0、2、3の要素を取得したい場合は、compress関数に (1, 0, 1, 1) というフラグの並びを渡し、抽出された値を変数に代入します。
サンプルコード
from itertools import compress
listA = ['Mon', ' 2pm', 1.5, '11 miles']
# 元のリスト
print("Given list A: " ,listA)
# compressを使用して代入
vDay, vHrs, vDist = compress(listA, (1, 0, 1, 1))
# 結果の出力
print ("The variables : " + vDay + ", " + str(vHrs) + ", " +vDist)
実行結果
上記のコードを実行すると、以下のような結果が得られます。
Given list A: ['Mon', ' 2pm', 1.5, '11 miles'] The variables : Mon, 1.5, 11 miles
補足:すべての要素を代入する場合
リストの全要素をそのまま変数に代入するだけであれば、a, b, c, d = listA のように単純なアンパック(展開)が使えます。ただし、左辺の変数の数とリストの要素数が一致している必要がある点には注意してください。
まとめ
リストから必要な要素だけを取り出して複数の変数に代入する方法として、①リスト内包表記でインデックスを指定する方法、②operator.itemgetterを使う方法、③itertools.compressでフラグを指定する方法の3つを紹介しました。それぞれ可読性や柔軟性に特徴があるため、コードの目的や規模に応じて使い分けると、より簡潔で保守しやすいプログラムになります。
-
Python(Matlplotlib)でXごとに複数のY値を持つ散布図を作成する方法
PythonのMatplotlibを使って、各Xに対して複数のY値を持つ散布図を作成するには、NumPyでx・yのデータ点を生成し、zip()関数で両者をペアにして反復処理しながらプロットしていく方法が有効です。この記事では、その具体的な手順とサンプルコードを解説します。 作成手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 NumPyを使用して、ランダムな xs と ys のデータ点を作成します。 zip() で xs と ys をペアにまとめ、一緒に反復処理します。 それぞれの x と y の値を使って散布図を描画します。 show() メソッドを呼び
-
Pythonのループでリストに値を追加・代入する方法【append()活用】
Pythonのループを使ってリストに値を追加する方法 Pythonの組み込みクラスであるlistには、要素を末尾に追加するためのappend()メソッドが用意されています。このメソッドとinput()関数、さらに無限ループ(while True)を組み合わせることで、ユーザーが入力した値を次々とリストに格納することができます。 以下のサンプルコードでは、ユーザーが何も入力せずにEnterキーを押すまで、繰り返し項目の入力を受け付け、その都度リストへ追加していきます。 L = [] while True: item = input(新しい項目を入力してください: ) if ite