Как я могу вычислить среднее значение вложенного списка, сохраняя его связанным со строкой

#python #nested-lists

Вопрос:

Извините, если это не имело никакого смысла! Я очень новичок в python, и мне действительно нужна помощь.

Я не хочу, чтобы этот вопрос решался за меня, но я был бы признателен за несколько советов в качестве отправной точки.

     listA = [("Aleah", [74, 100, 120, 67]), 
             ("Hannah", [95, 110, 110, 67]), 
             ("Timothy", [71, 111, 98, 106])]
 

По сути, мне нужно найти, у какого человека самая высокая средняя скорость движения, а затем напечатать его имя.

Как мне вычислить среднее значение второго элемента в списке (также списка), сохраняя его связанным с первым элементом в списке (их именем).

Я даже не знаю, с чего начать, поэтому буду признателен за любой совет. Спасибо!

Комментарии:

1. Что вы пробовали сами? Вы пробовали выполнять задачу в своем уме, разбивая ее шаг за шагом, а затем думая, как автоматизировать эти шаги?

2. Если вам нужно очень чистое решение, изучите max() и обратите внимание на его key параметр, который может быть a lambda , который вычисляет среднюю скорость — но этот подход может быть немного более продвинутым, чем более простой подход с простым 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 =' ')