Однострочник для result
и однострочник для res
:
result = max([[*map(int,d.split(','))] for d in lines], key=lambda p: math.log(*p))
res = math.log(*result)
Тада ?
Что это за магия?
Нужно понять, что result
окажется только одним списком длины два: [body, exp]
. И этот список решается logr > res
- ключом , чтобы сортировать, подразумевая использование min
, sorted
, max
или подобного.
Проблема с немедленной оценкой журнала, как показано в попытке в вопросе, заключается в том, что мы теряем значения, полученные из split(', ')
. Но нам нужны эти значения для result
! Вместо этого сохраните значения, сначала определите правильную пару, а затем просмотрите журнал.
Теперь до однострочников. Первая часть понимания довольно проста.
[[*map(int,d.split(','))] for d in lines]
Создает список списков проанализированных строк.
["111,222", "333,444", "555,666"] # before (lines)
[[111, 222],
[333, 444],
[555, 666]] # after (list comp.)
Затем мы выбираем пару, которая имеет наивысший журнал. Другими словами, мы берем max
, сравнивая по ключу key=lambda p: math.log(*p)
(т.е. сравниваем по журналу).
(Если вам интересно, что делает звездочка, она распаковывает данную итерацию (см. Что означает оператор звезды? для получения дополнительной информации). В данном конкретном случае math.log(*p)
- это то же самое как math.log(p[0], p[1])
.)
Как только мы выбрали наш результат, мы снова добавляем его в math.log
для вычисления res
.
И все хорошо кончается.