Подтвердить что ты не робот

Найти максимальное значение во втором столбце вложенного списка?

У меня есть список, как это:

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

Если я просто использую метод max(list), он вернет ответ 'strontium', что было бы правильно, если бы я пытался найти имя max, однако я пытаюсь вернуть элемент, чье целое число самое высокое.

4b9b3361

Ответ 1

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

Это работает потому, что ключевой аргумент функции max определяет функцию, которая вызывается, когда max хочет узнать значение, по которому будет выполняться поиск максимального элемента. max будет вызывать эту функцию для каждого элемента в последовательности. И lambda x: x[1] создает небольшую функцию, которая принимает список и возвращает первый элемент (отсчет начинается с нуля). Так

k = lambda x: x[1]

это то же самое, что сказать

def k(l):
  return l[1]

но короче и приятно использовать в подобных ситуациях.

Ответ 2

Используйте аргумент key.

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

Ответ 3

довольно сложно предположить, что элемент в списке на самом деле все еще число. Если числа стали строками, 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]))

сделает свое дело, когда вы уверены, что это будет число

Ответ 4

Для высокой скорости рассмотрите панд или 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()