查找列表的长度而不使用' len' python中的函数

时间:2015-03-21 03:08:19

标签: list jython

在我的高中作业中,它的一部分是创建一个能够在浮点列表中找到平均数的函数。我们不能使用len等,所以像sum(numList)/float(len(numList))这样的东西对我来说不是一个选择。我花了一个小时研究和绞尽脑汁寻找列表长度的方法,而不使用len函数,我没有任何东西,所以我希望无论是显示如何做或是指向正确的方向。帮助我堆叠溢出,这是我唯一的希望。 :)

2 个答案:

答案 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放在文件顶部,或将totalcount之一转换为在进行除法之前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)