Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで複数の特定のインデックス範囲にある要素を抽出する方法

Pythonで、複数の特定のインデックス範囲に該当する要素をリストから抽出したい場合があります。このようなときは、extendメソッドと、シンプルな繰り返し処理(イテレーション)およびインデックス指定(スライシング)を組み合わせることで、効率的に実現できます。

本記事では、具体的なサンプルコードとその実行結果をもとに、抽出の手順をわかりやすく解説します。

サンプルコード

以下が実際のコード例です。

my_list = [13, 21, 81, 10, 13, 17, 22, 18, 11, 90, 0]

print("The list is : ")
print(my_list)
print("The list after sorting is : " )
my_list.sort()
print(my_list)

range_list = [(2, 4), (7, 8), (1, 2), (2,7)]

my_result = []
for element in range_list:
   my_result.extend(my_list[element[0] : element[1] + 1])

print("The resultant list is : ")
print(my_result)

print("The result after sorting is : " )
my_result.sort()
print(my_result)

実行結果

The list is :
[13, 21, 81, 10, 13, 17, 22, 18, 11, 90, 0]
The list after sorting is :
[0, 10, 11, 13, 13, 17, 18, 21, 22, 81, 90]
The resultant list is :
[11, 13, 13, 21, 22, 10, 11, 11, 13, 13, 17, 18, 21]
The result after sorting is :
[10, 11, 11, 11, 13, 13, 13, 13, 17, 18, 21, 21, 22]

処理の流れの解説

  • まず、元となるリストを定義し、コンソールに表示します。

  • sort()メソッドを使ってリストを昇順にソートし、その結果をコンソールに表示します。

  • 次に、抽出対象となるインデックス範囲をタプルのリストとして定義します。各タプルは「開始インデックス」と「終了インデックス」のペアを表しています。

  • 抽出結果を格納するための空のリストを用意します。

  • 範囲を表すタプルのリストを繰り返し処理し、各タプルの値をもとにスライス my_list[開始 : 終了 + 1] で部分リストを取り出します。終了インデックスに+1しているのは、Pythonのスライスでは終了位置の要素が含まれないためです。

  • 取り出した部分リストをextend()メソッドで結果リストに順次追加していきます。append()ではなくextend()を使うことで、リストが入れ子にならず平坦な状態で結合されます。

  • 最後に、抽出結果をコンソールに表示した後、さらにソートして整列させた状態でもう一度表示します。

まとめ

このように、extend()メソッドとスライシングを組み合わせれば、複数の任意のインデックス範囲から要素をまとめて抽出できます。範囲の定義をタプルのリストとして管理することで、柔軟かつ読みやすいコードになります。データの一部を条件に応じて切り出したい場面でぜひ活用してみてください。

  1. PythonでCSVファイルから特定の列を抽出する方法(Pandas活用)

    PythonでCSVファイルから特定の列だけを抽出してリストとして扱いたい場合、Pandasのread_csv()メソッドを使うと簡単に実現できます。usecols引数に列名のリストを指定することで、必要な列のみを効率的に読み込むことが可能です。 手順 抽出したい列名をリストとして作成します。 read_csv()メソッドを使って、CSVファイルをデータフレーム(DataFrame)として読み込みます。 抽出したデータを表示します。 plot()メソッドを使ってデータフレームをグラフ化します。 図を表示するためにshow()メソッドを呼び出します。 コード例 import pandas a

  2. Pythonでリストから指定したインデックスの複数要素を削除する方法

    Pythonのリストから単一の要素を削除するのは、del文とインデックスを組み合わせれば簡単に行えます。しかし、複数のインデックスに該当する要素をまとめて削除したいケースでは、少し工夫が必要です。本記事では、削除対象となるインデックスのリストを指定して、元のリストから該当する要素だけを取り除く方法を2つ紹介します。方法1:sorted()とdelを組み合わせるこのアプローチでは、まず削除したい位置(インデックス)を格納したリストを作成します。その後、降順にソートしてから後ろの要素から順に削除することで、削除処理中にインデックスがずれる問題を回避し、元のリストの構造を保ったまま安全に要素を削除で