在我的高中作业中,它的一部分是创建一个能够在浮点列表中找到平均数的函数。我们不能使用len等,所以像sum(numList)/float(len(numList))
这样的东西对我来说不是一个选择。我花了一个小时研究和绞尽脑汁寻找列表长度的方法,而不使用len
函数,我没有任何东西,所以我希望无论是显示如何做或是指向正确的方向。帮助我堆叠溢出,这是我唯一的希望。 :)
答案 0 :(得分:3)
使用循环来添加列表中的值,并同时计算它们:
def average(numList):
total = 0
count = 0
for num in numList:
total += num
count += 1
return total / count
如果您可能会传递一个空列表,您可能需要先检查该列表并返回预定值(例如0
),或者提出一个比ZeroDivisionError
你更有帮助的例外情况如果你不做任何检查,我会得到。
如果您使用的是Python 2且列表可能都是整数,则应将from __future__ import division
放在文件顶部,或将total
或count
之一转换为在进行除法之前float
(将其中一个初始化为0.0
也可以。)
答案 1 :(得分:0)
也可以通过while
循环显示如何使用它,因为它是另一个学习的机会。
通常,您不需要for
循环内的计数器变量。但是,在某些情况下,保持计数以及从列表中检索项目会很有帮助,这就是enumerate()派上用场的地方。
基本上,以下解决方案是@Blckknght的内部解决方案。
def average(items):
"""
Takes in a list of numbers and finds the average.
"""
if not items:
return 0
# iter() creates an iterator.
# an iterator has gives you the .next()
# method which will return the next item
# in the sequence of items.
it = iter(items)
count = 0
total = 0
while True:
try:
# when there are no more
# items in the list
total += next(it)
# a stop iteration is raised
except StopIteration:
# this gives us an opportunity
# to break out of the infinite loop
break
# since the StopIteration will be raised
# before a value is returned, we don't want
# to increment the counter until after
# a valid value is retrieved
count += 1
# perform the normal average calculation
return total / float(count)