如何在不使用len()的情况下在python中查找列表的长度

如何在不使用len()的情况下在python中查找列表的长度,python,Python,我想写一个函数,它将根据用户输入找出列表的长度。我不想使用内置函数len。请帮帮我。我写的函数对字符串有效,但对列表无效 #function for finding out the length def string_length(a): for i in a: j+=1 return j #taking user input a = input("enter string :") length = string_length(a) print("length

我想写一个函数,它将根据用户输入找出列表的长度。我不想使用内置函数len。请帮帮我。我写的函数对字符串有效,但对列表无效

#function for finding out the length
def string_length(a):
    for i in a:
        j+=1
    return j

#taking user input
a = input("enter string :")
length = string_length(a)
print("length is ", length)

您可能需要在重命名计数器下初始化变量j:

正如zondo所指出的,这也可以在一条pythonic行中使用生成器表达式来完成:

def string_length(my_string):
    """returns the length of a string
    """
    return sum(1 for _ in my_string)
很简单:

def string_length(string):
    return sum(1 for char in string)
字符串中字符的1是为字符串中的每个字符生成1的。我们将生成器传递给求和器,求和器将它们相加。问题是在添加j之前没有定义j。您需要将j=0放在循环之前。还有一种方式没有我上面说的那么好:

from functools import reduce # reduce() is built-in in Python 2.

def string_length(string):
    return reduce(lambda x,y: x+1, string, 0)

这是因为reduce首先使用初始参数0和字符串中的第一个字符调用lambda函数。lambda函数返回其第一个参数0加1。reduce然后使用结果1和字符串中的下一个字符再次调用该函数。它继续这样做,直到它传递了字符串中的每个字符。结果是:字符串的长度。

我不知道你是如何让它适用于字符串的。请注意,您在向“j”变量添加1时,没有先说明j是什么。您说它不适用于列表是什么意思?你能举一个输入失败的例子吗?另外,正如前面所指出的,这段代码不应该运行,因为您从来没有在方法中实际声明过j。您的函数一旦按照其他注释建议修复,将适用于任何有限iterable。但是,请注意,如果您将其称为无限迭代器,它将永远运行,而不是像len那样引发异常。这是否回答了您的问题?如果OP使用的是python3,那么他需要使用functools.reduce作为第二个示例。@snakecharmerb:很好。我编辑过。我太习惯Python 2了,因为LPTHW是我读过的Python书籍。
from functools import reduce # reduce() is built-in in Python 2.

def string_length(string):
    return reduce(lambda x,y: x+1, string, 0)