Нахождение среднего значения функции с двумя параметрами - PullRequest
0 голосов
/ 26 апреля 2018

Я относительно новичок в python и у меня был быстрый вопрос о коде, который я пытаюсь написать ...

Я нахожу среднее значение двух списков: широта и долгота.Вот мой код:

def ave_list(lat_list, long_list):
    sum = 0.0 
    for num in lat_list:
        sum = sum + num
    ave_lat = sum / len(lat_list)
    return ave

def main():
    print ave_list([47.7, 37.0, 32.9, 32.0, 40.0, 41.0, 41.4, 41.8, 0.2, 31.8, -6.3])
main()

Итак, я понимаю, как найти среднее значение, если у меня был только один параметр, но я не знаю, как написать код с двумя параметрами.Если я запускаю эту функцию, она говорит мне, что ave_list () принимает ровно 2 аргумента, но я дал только один.Я понимаю это, но опять же, я не уверен, как получить отдельные средние с двумя параметрами.Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 26 апреля 2018

Просто чтобы добавить к другим ответам, у вас может быть функция с двумя аргументами для вычисления средней широты и долготы следующим образом

Использование statistics.mean

import statistics
def ave_lat_long(lat_list, long_list):
    return(statistics.mean(lat_list),statistics.mean(long_list))

Пример сохраненного результатакортеж средней широты и долготы в отдельных переменных (распаковка кортежа)

ave_lat,ave_long= ave_lat_long([47.7, 37.0, 32.9],[40.0, 41.0, 41.4])

Печать средней широты и долготы

print ave_lat_long([47.7, 37.0, 32.9],[40.0, 41.0, 41.4])

Результат (в консоли)

(39.2, 40.8)

Или, определив свою собственную среднюю функцию как ave_list:

def ave_list(coordinate_list):
    sum = 0.0 
    for num in coordinate_list:
        sum = sum + num
    ave_list = sum / len(coordinate_list)
    return round(ave_list,1)

Затем определите функцию для средней широты и долготы

def ave_lat_long(lat_list,long_list):
    return (ave_list(lat_list),ave_list(long_list))

Печать средней широты и долготы

print(ave_lat_long([47.7, 37.0, 32.9],[40.0, 41.0, 41.4]))

Результат (в консоли)

(39.2, 40.8)
0 голосов
/ 26 апреля 2018

То же самое, что вы делаете для списка, делаете для другого и возвращаете 2 значения как tuple .( [SO]: возврат кортежа из метода )

Вот реализация, которая использует [Python]: sum ( iterable [, start] ) .
Обратите внимание, что это может быть написано гораздо более компактным способом, но я держу все шаги отдельно, так что это более понятно:

def ave_list(lat_list, long_list):
    lat_sum = sum(lat_list)  # Calculate the sum
    if len(lat_list):  # Test so we don't divide by 0
        lat_avg = lat_sum / len(lat_list)  # Calculate avg
    else:
        lat_avg = 0  # List empty, consider avg 0
    long_sum = sum(long_list)  # Same thing for longitude
    if len(long_list):
        long_avg = long_sum / len(long_list)
    else:
        long_avg = 0
    return lat_avg, long_avg

Результаты могут быть получены с помощью распаковка кортежей (отметьте [Python]: кортежи и последовательности ):

lat_ave, long_ave = ave_list([1, 2, 3], [3, 4, 5])

, и это должно дать вам 2.0 для lat_aveи 4,0 для long_ave.

0 голосов
/ 26 апреля 2018

Чтобы избавиться от ошибки, вы должны передать в функцию два значения.Вместо того, чтобы использовать его, лучше использовать statistics.mean:

from statistics import mean
>>> mean([1, 2, 3])
2
>>> mean([1, 2, 3.0])
2.0

Если этот модуль недоступен, вы можете использовать:

>>> data = [1, 2, 3]
>>> sum(data) / len(data)
2

, если выиметь только целые числа и хотите получить результат как float в python2, просто конвертируйте одну из сторон в float:

>>> data = [1, 2, 3, 7]
>>> sum(data) / len(data)
3
>>> sum(data) / float(len(data))
3.25
0 голосов
/ 26 апреля 2018

Вы должны удалить long_list из ave_list, поскольку он даже не используется.

Если вы хотите вычислить среднее значение для двух списков, вы можете либо вызвать ave_list дважды, один вызов передать каждый список или сделать ave_list возвращаемое множество значений (как кортеж,для примера)

0 голосов
/ 26 апреля 2018

Самое простое решение - переопределить ave_list, чтобы взять один список, и из main, вызвать его один раз для широты и один раз для долготы:

def ave_list(mylist):
    sum = 0.0 
    for num in mylist:
        sum = sum + num
    ave = sum / len(mylist)
    return ave

Python позволяет функции возвращать два значения каккортеж, чтобы вы могли перекодировать исходную функцию для возврата (ave_lat, ave_lon).Но зачем добавлять это осложнение?Здесь, однако, для целей обучения:

def ave_list(lat_list, long_list):
    sum = 0.0 
    for num in lat_list:
        sum = sum + num
    ave_lat = sum / len(lat_list)
    sum = 0.0 
    for num in lon_list:
        sum = sum + num
    ave_lon = sum / len(lon_list)
    return (ave_lat, ave_lon)

alat, alon = ave_list([1, 2, 3, 4], [5, 6, 7, 8])
print(alat, alon)

Конечно, как указывает @bla в комментарии, лучше использовать statistics.mean:

import statistics
alat = statistics.mean([1,2,3,4])
alon = statistics.mean([5,6,7,8])
print(alat, alon)

Это в python3;не уверен насчет python2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...