#python #nested-lists
Вопрос:
Извините, если это не имело никакого смысла! Я очень новичок в python, и мне действительно нужна помощь.
Я не хочу, чтобы этот вопрос решался за меня, но я был бы признателен за несколько советов в качестве отправной точки.
listA = [("Aleah", [74, 100, 120, 67]),
("Hannah", [95, 110, 110, 67]),
("Timothy", [71, 111, 98, 106])]
По сути, мне нужно найти, у какого человека самая высокая средняя скорость движения, а затем напечатать его имя.
Как мне вычислить среднее значение второго элемента в списке (также списка), сохраняя его связанным с первым элементом в списке (их именем).
Я даже не знаю, с чего начать, поэтому буду признателен за любой совет. Спасибо!
Комментарии:
1. Что вы пробовали сами? Вы пробовали выполнять задачу в своем уме, разбивая ее шаг за шагом, а затем думая, как автоматизировать эти шаги?
2. Если вам нужно очень чистое решение, изучите
max()
и обратите внимание на егоkey
параметр, который может быть alambda
, который вычисляет среднюю скорость — но этот подход может быть немного более продвинутым, чем более простой подход с простымfor
циклом. Вот почему вы должны сначала попытаться решить его самостоятельно, чтобы в итоге не получить действительно хорошее решение, которое вы вообще не понимаете, но которое просто работает.
Ответ №1:
Вы можете использовать max
и его key
параметр:
import statistics
def solve(lst):
return max(lst, key=lambda v: statistics.mean(v[1]))[0]
Это гласит
max(...)
: вычислить максимальный элементlst
: список, указанный в качестве входных данныхkey=...
: использование в качестве ключа сортировкиlambda v: ...
: функция, которая будет применяться к каждому элементуv
вlst
, возвращаяstatistics.mean(v[1])
: среднее значение второго элементаv
,
[0]
: и верните его первый элемент.
Тем не менее,
listA = [("Aleah", [74, 100, 120, 67]), ("Hannah", [95, 110, 110, 67]), ("Timothy", [71, 111, 98, 106])]
print(solve(listA))
выведет Timothy.
Вы можете прочитать больше об этом max
здесь и прочитать больше о ключевых функциях здесь .
Ответ №2:
Другой способ сделать это может быть ниже:
# creating class solution
class solution:
def __init__(self, name, value):
self.name = name
self.value = value
# creating list
alist = []
avgList = []
# appending instances to list
alist.append( solution('Aleah', [74, 100, 120, 67]) )
alist.append( solution('Hannah', [95, 110, 110, 67]) )
alist.append( solution('Timothy', [71, 111, 98, 106]) )
for obj in alist:
avgList.append(sum(obj.value) / len(obj.value))
print(alist[avgList.index(max(avgList))].name, "has the fastest average speed.", sep =' ')