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

时间:2016-04-04 12:16:23

标签: 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 is ", length)

3 个答案:

答案 0 :(得分:2)

您可能需要初始化变量j(此处重命名为counter):

def string_length(my_string):
    """returns the length of a string
    """
    counter = 0
    for char in my_string:
        counter += 1
    return counter

# taking user input
string_input = input("enter string :")
length = string_length(string_input)

print("length is ", length)

这也可以使用生成器表达式在一个“pythonic”行中完成,正如zondo所指出的那样:

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

答案 1 :(得分:2)

这很简单:

def string_length(string):
    return sum(1 for char in string)

1 for char in stringgenerator expression,为字符串中的每个字符生成1。我们将该生成器传递给sum(),将它们全部添加起来。你所拥有的问题是你在添加之前没有定义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()首先使用 initial 参数0调用lambda函数,并且字符串中的第一个字符。 lambda函数返回其第一个参数0加1。 reduce()然后再次使用结果1和字符串中的下一个字符调用该函数。它继续这样,直到它传递了字符串中的每个字符。结果:字符串的长度。

答案 2 :(得分:0)

你也可以这样做:

a=[1,2,2,3,1,3,3,]
pos=0 
for i in a: 
    pos+=1
print(pos)