Pythonでリスト内の指定した範囲から要素を抽出する方法
はじめに
Pythonでは、リストの中から複数の範囲(インデックス区間)に該当する要素だけをまとめて抽出したいケースがあります。例えば、大きなデータ列から特定の位置の値だけを取り出す場合などです。このような処理は、forループによる反復処理とextend()メソッドを組み合わせることで、シンプルかつ効率的に実現できます。
サンプルコード
以下は、リスト内の複数の範囲から要素を抽出する実装例です。
my_list = [14, 55, 41, 14, 17, 59, 22, 25, 14, 69, 42, 66, 99, 19]
print("The list is :")
print(my_list)
range_list = [(12, 14), (17, 18), (22, 28)]
print("The list is :")
print(range_list)
my_result = []
for element in range_list:
my_result.extend(my_list[element[0] : element[1] + 1])
print("The result is :")
print(my_result)
実行結果
The list is : [14, 55, 41, 14, 17, 59, 22, 25, 14, 69, 42, 66, 99, 19] The list is : [(12, 14), (17, 18), (22, 28)] The result is : [99, 19]
コードの解説
- まず、整数のリスト
my_listを定義し、コンソールに表示します。 - 次に、抽出したい範囲を「(開始インデックス, 終了インデックス)」というタプルのリスト
range_listとして定義します。 - 抽出結果を格納するための空のリスト
my_resultを用意します。 range_listを for ループで反復処理し、各タプルの0番目の要素から1番目の要素+1までをスライス構文で切り出します。「+1」しているのは、スライスの終了インデックスが排他的(その手前まで)であるためです。- 切り出した要素群を
extend()メソッドでmy_resultに追加します。append()ではなくextend()を使うことで、リストがネストせずフラットな状態で結合される点がポイントです。 - 最終的に、すべての範囲から抽出された要素がコンソールに出力されます。
補足:リスト内包表記による別解
同じ処理は、リスト内包表記を使うことでより簡潔に記述することもできます。
my_result = [x for element in range_list for x in my_list[element[0]:element[1] + 1]]
この方法でもまったく同じ結果が得られます。処理の流れを追いやすさを重視するなら for ループ、コード量を抑えたいなら内包表記と、目的に応じて使い分けるとよいでしょう。
-
PythonでリストからN個の最大要素を取得する方法
整数のリストが与えられたとき、その中からN個の大きな要素を取り出して新しいリストとして返すのが、ここでの課題です。本記事では、基本的なループ処理による方法から、Python標準ライブラリを活用した効率的な方法まで、サンプルコードとともに解説します。 例 入力 : [40, 5, 10, 20, 9] N = 2 出力 : [40, 20] アルゴリズム 整数のリストと、取得する要素数Nを受け取ります。 N回のループを実行します。 各ループでリスト内の最大値を探し、新しいリストに格納すると同時に元のリストから削除します。 実装コード def Nnumberele(list1, N):
-
Pythonでリストから重複要素を削除する方法を徹底解説
重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。