2014-01-30 4 views
2

Так я отслеживаю руководство для начинающих на Python, и я получил это упражнение:Среднее значение всех значений в списке - есть ли более «питонический» способ сделать это?

Создать список, содержащий 100 случайных чисел в диапазоне от 0 до 1000 (используйте итерации, добавлять и случайный модуль). Напишите функцию под названием average, которая примет список как параметр и вернет среднее значение.

я решил его легко в течение нескольких минут, но chapter также упоминает несколько способов, чтобы пройти через списки и назначить несколько значений списков и переменные, которые я не уверен, если я еще полностью понять, так что я не знайте, возможно ли это сделать в меньших количествах. Это мой ответ:

import random 

def createRandList(): 
    newlist = [] 
    for i in range(100): 
     newint = random.randrange(0,1001) 
     newlist.append(newint) 
    return newlist 

def average(aList): 
    totalitems = 0 
    totalvalue = 0 
    for item in aList: 
     intitem = int(item) 
     totalitems = totalitems + 1 
     totalvalue = totalvalue + intitem 
    averagevalue = totalvalue/totalitems 
    return averagevalue 

myList = createRandList() 
listAverage = average(myList) 

print(myList) 
print(listAverage) 

Заранее благодарен!

ответ

9

Использование языка Python встроенные sum и len функции:

print(sum(myList)/len(myList)) 
+3

И createRandList может быть выражен как '' '[random.randrange (0, 1001) для i в диапазоне (100)]' '' – nathancahill

+0

Спасибо большое! Рад узнать, что 'sum' работает в списках. – reggaelizard

+3

Кроме того, переменные Python обычно являются lower_case_with_underscores вместо mixedCase. my_list вместо myList. – nathancahill

1

Я согласен с предложением выше об использовании sum.

Хотя я не люблю использовать список понимание, чтобы просто запустить фиксированное число итераций, ваша createRandList тело функции может быть просто:

return [random.randint(0,1000) for i in range(100)] 

(Кроме того, я нахожу randint немного более удобным для чтения, так как «Стоп» - это тот, который вам нужен, а не тот, который вы хотите + 1.)

В любом случае вы можете отказаться от линии, на которой вы звоните int() на свои номера - вывод randrange уже включен.

+0

Хотя 'randint' обращается к более универсальному здравому смыслу,' randrange' является предпочтительным из-за его согласованности с соглашением Python, например. 'range (start, stop)' и синтаксис среза ('[start, stop]'). На самом деле, randint неоднократно устарел в истории python. См. Http://stackoverflow.com/a/2568917/2980246 – jayelm

Смежные вопросы