【Python】リストから検索した要素を抽出する方法

この記事では、Pythonのリストから要素を検索し抽出するためのさまざまな方法を紹介します。

線形検索法や二分検索法から、リスト内包表記や組み込み関数、NumPyやPandasを使用した方法まで、初心者にもわかりやすく解説します。

さらに、複数の条件を組み合わせた要素の抽出方法や効率的な方法についても紹介します。

目次から探す

線形検索法による要素の検索

線形検索法は、リストの先頭から順番に要素を比較し、目的の要素を見つけるまで繰り返し処理を行う方法です。

以下は、線形検索法を使用してリストから要素を検索する例です。

def linear_search(lst, target):
    for i in range(len(lst)):
        if lst[i] == target:
            return i
    return -1

# リストの作成
numbers = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

# 要素の検索
index = linear_search(numbers, 6)
if index != -1:
    print(f"要素が見つかりました。インデックス: {index}")
else:
    print("要素が見つかりませんでした。")

上記の例では、linear_searchという関数を定義し、リストと目的の要素を引数として受け取ります。

関数内では、forループを使用してリストの要素を順番に比較し、目的の要素が見つかった場合はそのインデックスを返します。

見つからなかった場合は-1を返します。

二分検索法による要素の検索

二分検索法は、ソートされたリストを対象に、中央の要素と目的の要素を比較して探索範囲を狭めていく方法です。

以下は、二分検索法を使用してリストから要素を検索する例です。

def binary_search(lst, target):
    low = 0
    high = len(lst) - 1

    while low <= high:
        mid = (low + high) // 2
        if lst[mid] == target:
            return mid
        elif lst[mid] < target:
            low = mid + 1
        else:
            high = mid - 1

    return -1

# リストの作成(ソート済み)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 要素の検索
index = binary_search(numbers, 6)
if index != -1:
    print(f"要素が見つかりました。インデックス: {index}")
else:
    print("要素が見つかりませんでした。")

上記の例では、binary_searchという関数を定義し、ソートされたリストと目的の要素を引数として受け取ります。

関数内では、whileループを使用して探索範囲を狭めていきます。

中央の要素と目的の要素を比較し、探索範囲を半分に分割していきます。

目的の要素が見つかった場合はそのインデックスを返します。

見つからなかった場合は-1を返します。

線形検索法はリストの要素数に比例して処理時間が増えるため、要素数が多い場合は効率的ではありません。

一方、二分検索法はソートされたリストを前提としているため、事前にソートする必要がありますが、要素数に対して効率的な処理が行えます。

目次から探す