使用两个参数查找函数的平均值

时间:2018-04-25 22:35:17

标签: python parameters

我对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 :(得分:1)

最简单的解决方法是重新定义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。

答案 1 :(得分:1)

要消除错误,您应该将两个值传递给您的函数。而不是使用它,更好的方法是使用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

如果你只有整数并希望结果在python2中浮动,只需将其中一个转换为浮点数:

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

答案 2 :(得分:0)

您应该从long_list删除ave_list,因为它甚至没有被使用过。

如果您要计算两个列表的分隔平均值,您可以调用ave_list两次,一次调用通过每个列表或使ave_list返回多个值(作为元组,例如)

答案 3 :(得分:0)

您为列表执行的操作与另一个相同,并将2个值作为元组返回。 ([SO]: return tuple from a method

这是一个使用[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]: Tuples and Sequences):

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

这应该为lat_ave提供 2.0 ,为{{1提供 4.0 }}

答案 4 :(得分:0)

只需添加其他答案,您就可以使用两个参数函数来计算平均纬度&经度如下

使用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)