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

Pythonでネストされたリストから最長のサブリストを見つける3つの方法

Pythonでデータ分析を行う際、ネストされたリスト(リストの中にリストが入った構造)を扱うことはよくあります。この記事では、ネストされたリストの要素の中から最も長いサブリストを見つけ出し、そのサブリストと長さを一緒に出力する方法を紹介します。

ここでは、代表的な3つのアプローチを取り上げます。

1. lambdaとmapを使う方法

まずネストされたリストを宣言し、それをlambda関数に渡して各要素の長さを評価します。最後にmax関数を適用することで、最大の長さを持つリストと、その長さを取得できます。

コード例

def longest(lst):
    longestList = max(lst, key = lambda i: len(i))
    maxLength = max(map(len, listA))
    return longestList, maxLength
# Driver Code
listA = [[1,2], [2,45,6,7], [11,65,2]]
print("Longest List and its length:\n",longest(listA))

実行結果

上記のコードを実行すると、次のような結果が得られます。

Longest List and its length:
([2, 45, 6, 7], 4)

この方法では、max関数のkey引数にlambda式を指定することで、「要素の長さ」を比較基準として最長のサブリストを直接取り出せるのがポイントです。

2. lenとmaxを使う方法

このアプローチでは、まずジェネレータ式とlen関数を組み合わせて最大の長さを求め、その後リストの各要素をループして、その長さに一致するサブリストを特定します。

コード例

def longest(lst):
    longestList = []
    maxLength = max(len(x) for x in listA)
    for i in listA:
        if len(i) == maxLength :
            longestList = i
    return longestList, maxLength
# Driver Code
listA = [[1,2], [2,45,6,7], [11,6,2]]
print("Longest List and its length:\n",longest(listA))

実行結果

上記のコードを実行すると、次のような結果が得られます。

Longest List and its length:
([2, 45, 6, 7], 4)

処理の流れが明快で、初心者にも理解しやすいのがこの方法の利点です。

3. mapを使う方法

これは前述の方法とほぼ同じアプローチですが、各サブリストの長さを求める部分にmap関数を使用している点が異なります。map(len, listA)により、すべてのサブリストの長さを一括して取得し、その最大値を計算します。

コード例

def longest(lst):
    longestList = []
    maxLength = max(map(len,listA))
    for i in listA:
        if len(i) == maxLength :
            longestList = i
    return longestList, maxLength
# Driver Code
listA = [[1,2], [2,45,6,7], [11,6,2]]
print("Longest List and its length:\n",longest(listA))

実行結果

上記のコードを実行すると、次のような結果が得られます。

Longest List and its length:
([2, 45, 6, 7], 4)

まとめ

いずれの方法でも同じ結果が得られますが、用途に応じて使い分けるとよいでしょう。

  • lambda + max: コードが最も簡潔で、Pythonらしい書き方
  • len + max(ジェネレータ式): 処理の流れが分かりやすく、デバッグもしやすい
  • map + max: 関数型スタイルで、長さの一括取得が明確

なお、最長のサブリストが複数存在する場合、これらの方法では最初に見つかったものが返される点に注意してください。

  1. Pythonでリストから最も長い単語を上位k個抽出する2つの方法

    プログラミングでは、長さの異なる多数の単語が含まれるリストの中から、上位n個の最も長い単語を取り出したい場面があります。本記事では、このような処理を実現するための2つのアプローチを、サンプルコードと実行結果とともにわかりやすく解説します。方法1:count()とsorted()を使う方法まず、リストの要素を逆順にソートすることで、最も長い単語がリストの先頭に並ぶようにします。次に各単語の長さを求め、そのカウント結果を変数に格納します。最後に、必要な件数分だけスライスして、最長の単語を取得します。ここで使われているitertools.count()は無限に増加するカウンターを生成するイテレータで

  2. Pythonでネストされたリストから最大値を持つサブリストを検索する方法

    Pythonでは、リストの要素として別のリスト(サブリスト)を持つことができます。本記事では、指定されたリストの中に含まれる複数のサブリストから、最大値を持つサブリストを見つける方法を2つのアプローチで解説します。 方法1: max関数とlambda式を組み合わせる 最もシンプルな方法は、max()関数とlambda式を組み合わせることです。lambda式でサブリスト内の比較対象となる要素(この例ではインデックス1の数値)を指定することで、その値が最大であるサブリストを取得できます。 コード例 listA = [[Mon, 90], [Tue, 32], [Wed, 120]] # lambd