Pythonで別のリストをインデックスにしてリストの要素を取得する3つの方法
Pythonでは、あるリストの要素を、別のリストに格納された数値(インデックス位置)に基づいて取り出したい場面がよくあります。例えば、曜日名が入ったリストから、指定された位置の要素だけを抜き出すようなケースです。本記事では、この処理を実現する3つの方法を、具体的なコード例とともに解説します。
mapと__getitem__を組み合わせる方法
リストには特殊メソッド(マジックメソッド)である__getitem__が用意されており、これを使うとリストの要素へアクセスできます。このメソッドをmap関数と組み合わせることで、2つ目のリストの各要素をインデックスとして扱い、1つ目のリストから対応する要素をまとめて取得できます。
コード例
listA = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
listB = [0, 1, 3]
print("Given list A:", listA)
print("Given list B:", listB)
res = list(map(listA.__getitem__, listB))
print("Result :", res)
実行結果
Given list A: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] Given list B: [0, 1, 3] Result : ['Mon', 'Tue', 'Thu']
operatorモジュールのitemgetterを使う方法
operatorモジュールが提供するitemgetter関数も、同じ目的に利用できます。2つ目のリストをアンパックして複数のインデックスとして渡し、1つ目のリストから対応する要素を一度に取得するのがポイントです。
コード例
from operator import itemgetter
listA = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
listB = [0, 1, 3]
print("Given list A:", listA)
print("Given list B:", listB)
res = list(itemgetter(*listB)(listA))
print("Result :", res)
実行結果
Given list A: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] Given list B: [0, 1, 3] Result : ['Mon', 'Tue', 'Thu']
NumPyを使う方法
数値計算ライブラリのNumPyを使えば、さらに簡潔に記述できます。2つのリストをそのまま配列に変換し、配列によるインデックス指定(ファンシーインデックス)を適用した後、結果を再びリストに戻すだけで完了です。
コード例
import numpy as np
listA = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
listB = [0, 1, 3]
print("Given list A:", listA)
print("Given list B:", listB)
res = list(np.array(listA)[listB])
print("Result :", res)
実行結果
Given list A: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'] Given list B: [0, 1, 3] Result : ['Mon', 'Tue', 'Thu']
まとめ
標準ライブラリだけで完結するmap+__getitem__やitemgetterは、外部依存を増やしたくない場合に便利です。一方、大量のデータを扱う場合はNumPyの方が高速に処理できるため、データ規模や用途に応じて使い分けるのがおすすめです。
-
リスト内の要素の合計を求めるPythonプログラム
この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()
-
PythonでリストからN個の最大要素を取得する方法
整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):