ネストされたリストがあります:
nested_list = [['a', 3], ['a', 1], ['a', 5]]
このリストを繰り返し処理し、最大整数値のサブリストを選択するにはどうすればよいですか?
holder = []
for entry in nested_list:
tmp = sublist with max entry[2] value
holder.append(tmp)
私は2行目のコーディングで立ち往生しています。
ネストされたリストがあります:
nested_list = [['a', 3], ['a', 1], ['a', 5]]
このリストを繰り返し処理し、最大整数値のサブリストを選択するにはどうすればよいですか?
holder = []
for entry in nested_list:
tmp = sublist with max entry[2] value
holder.append(tmp)
私は2行目のコーディングで立ち往生しています。
試す:
max(nested_list, key=lambda x: x[1])
また
import operator
max(nested_list, key=operator.itemgetter(1))
最初のアイテムが常にである場合'a'
、あなたはただすることができます
max(nested_list)
あるタイプのチェックに飛び込みたい場合で、任意のサブリスト(1つのレベルのみ。[12、'a'、12、42、'b']など)に対してこれを実行したい場合は、次のように実行できます。 。
import numbers
max(nested_list, key=lambda x: max(i for i in x
if isinstance(i, numbers.Integral)))
nested_list
いずれにせよ、の要素が実際にリストであるかどうかわからない場合は、次のことができます。
import collections
max((s for s in nested_list
if isinstance(s, collections.Sequence)),
key=some_key_function)
そして、それをあなた自身の考案の重要な機能またはこの答えの他の機能の1つに渡すだけです。
lambda x: x[1]
対質問の観点からoperator.itemgetter(1)
、私はプロファイルします。itemgetter
当然のことながら、これが正しい方法の1つoperator
ですが、でラムダ関数が「バグ」(私はこの用語を大まかに使用しますが、コードは引き続き機能します)に対して、ソリューションのパフォーマンスが向上することを確認しましたoperator
。私の好みはitemgetter
、パフォーマンスが重要ではない場合(そしておそらくそれが重要である場合)ですが、余分なものを避けたい人もいimport
ます。
これはあなたが望むことをしますか?
biggest = nested_list[0]
for entry in nested_list:
if entry[1] > biggest[1]:
biggest = entry
リストがあなたが提案するほど単純な場合:
>>> nested_list = [['a', 3], ['a', 1], ['a', 5], ['a',2]]
>>> k = sorted(nested_list)
>>> k[-1]
['a', 5]
>>>