我想写一个函数,它会根据用户输入找出列表的长度。我不想使用内置函数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)
答案 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 string
是generator 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)