2016-09-27 2 views
0

Вот вопрос, я пытаюсь определить функцию sample_mean, которая принимает список чисел в качестве параметра и возвращает среднее значение выборки из числа в этом списке. Вот что я до сих пор, но я не уверен, что это совершенно правильно.Как написать функцию со списком в качестве параметров

def sample_mean(list): 
    """ (list) -> number 
    takes in a list of numbers as a parameter and returns the sample mean of the the numbers in that list 
    sample_mean = 
    sample_mean = 
    """ 

    mean = 0 
    values = [list] 
    for list in values: 
     print('The sample mean of', values, 'is', mean(list)) 
+2

Не используйте 'list' в качестве аргумента для определения своего * списка *. Он затеняет встроенный [список] (https://docs.python.org/3/library/functions.html#func-list). – idjaw

+2

Если ваш метод принимает список, то 'values ​​= [list]' не имеет смысла. Аргумент, который вы передаете в свой список, уже должен быть списком, поэтому то, что вы там делаете, не требуется. Например: если у вас есть список, который передается вашему методу как '[1, 2]', то 'values ​​= [list]' превратит это в '[[1, 2]]'. Это определенно то, чего вы не хотите. – idjaw

+0

Удивительное спасибо! –

ответ

1

Во-первых, не используйте list как имя, потому что оно скрывает/скрывает встроенный класс list для области, в которой он объявлен. Используйте имя, которое описывает значения в списке, в этом случае samples может быть хорошим именем. Функция может быть реализована с чем-то вроде этого:

def sample_mean(samples): 
    total = 0 
    for value in samples: 
     total = total + value 
    return total/float(len(samples)) 

Или сокращенный вариант, который позволяет избежать написания собственного цикла путем использования sum() функции языка Python:

def sample_mean(samples): 
    return sum(samples)/float(len(samples)) 

Вызов функции, как это:

>>> print(sample_mean([1,2,3,4,5])) 
3.0 

Обратите внимание на использование float(), чтобы гарантировать, что операция деления не потеряет дробную часть. Это только проблема в Python 2, которая по умолчанию использует целочисленное деление. В качестве альтернативы вы можете добавить это к верхней части вашего скрипта:

from __future__ import division 

Если вы уверены, что вам нужно только поддерживать Python 3 вы можете удалить float() и игнорировать выше.

+0

Спасибо, это очень полезная информация. Я все новичок в кодировании и python. –

0

Как было указано выше, путем @idjaw, не следует использовать list в качестве параметра вместо того, чтобы использовать listr (например). Ваш values = [list] ошибочен (также указан @idjaw) и его следует удалить.

Кроме того, согласно PEP257, вы не должны использовать "(list) -> number" в своих докстеллах, поскольку это должно использоваться только для встроенных компонентов.

Наконец, ваша петля должна выглядеть как for l in listr:, а затем вы добавляете значения в свою среднюю переменную. разделите его на количество значений в списке и распечатайте результат.

+0

У меня есть вопрос относительно ответа на печать такого утверждения. «Среднее значение выборки из [samples] - [sample_mean]« У меня есть это, но он не печатает заявление, как я хочу, samples = 0, для num в образцах : print ('Примерное среднее из', samples, 'is', sample_mean) может кто-то объяснить, что не так? –

+0

является 'sample_mean'' 'int'? то почему у вас есть 'для num в образцах:'? – Corgs

+0

no sample_mean - это среднее из образцов –

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