web-dev-qa-db-ja.com

ネストされたリストの2番目の列で最大値を見つけますか?

私はこのようなリストを持っています:

_alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20],
                         ['strontium', 38], ['barium', 56], ['radium', 88]]
_

単純にmax(list)メソッドを使用すると、回答_'strontium'_が返されます。これは、max nameを見つけようとした場合に正しいはずですが、整数が最も大きい要素を返そうとしています。

30
davelupt
max(alkaline_earth_values, key=lambda x: x[1])

これが機能する理由は、max関数のkey引数がmaxが最大の要素が検索されます。 maxは、シーケンス内の各要素に対してその関数を呼び出します。そしてlambda x: x[1]は、リストを受け取り、最初の(ゼロから数える)要素を返す小さな関数を作成します。そう

k = lambda x: x[1]

言うことと同じです

def k(l):
  return l[1]

しかし、このような状況では、短くて使いやすいです。

54
kynnysmatto

key引数を使用します。

max(alk..., key=operator.itemgetter(1))

高速化のためにpandasまたはnumpy:

Import pandas as pd
alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20],
                     ['strontium', 38], ['barium', 56], ['radium', 88]]
pd.DataFrame(alkaline_earth_values)[1].max()

リスト内の項目が実際にはまだ数字であると想定するのはかなり難しいです。数値が文字列になっている場合、max()は最初の数値が最も高い「値」を返します。

alkaline_earth_values = [['beryllium', '9'], ['magnesium', '12'],['calcium', '20'],
                         ['strontium', '38'], ['barium', '56'], ['radium', '88']]
max(alkaline_earth_values, key=lambda x: x[1])

戻り値 ['beryllium', '9']

max(alkaline_earth_values, key=lambda x: float(x[1]))

あなたがそれが数になると確信しているとき、トリックを行います

0
uytda