我对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个参数,但我只给了一个。我理解这一点,但同样,我不确定如何使用这两个参数获得单独的平均值。提前谢谢。
答案 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)