3

Can anyone tell me how can I get the length of a string without using the len() function or any string methods. Please anyone tell me as I'm tapping my head madly for the answer.
Thank you.

4

17 回答 17

21
>>> sum(map(lambda x:1, "hello world"))
11

>>> sum(1 for x in "foobar")
6

>>> from itertools import count
>>> zip(count(1), "baz")[-1][0]
3

一个“绕口令”

>>> sum(not out not in out for out in "shake it all about")
18

一些递归解决方案

>>> def get_string_length(s):
...     return 1 + get_string_length(s[1:]) if s else 0
... 
>>> get_string_length("hello world")
11
>>> def get_string_length_gen(s):
...     yield 1 + next(get_string_length_gen(s[1:])) if s else 0
... 
>>> next(get_string_length_gen("hello world"))
11
>>> 
于 2010-10-21T21:59:02.833 回答
8

这是一个 O(1) 方法:

def strlen(s):
    if s == "": return 0
    return s.rindex(s[-1]) + 1

换句话说,它不能通过计算字符来工作,因此对于 1GB 字符串应该和 1 字节字符串一样快。

它的工作原理是查看最后一个字符并从最后一个字符开始搜索以找到该字符。由于它是最后一个字符,它总是会在它看起来的第一个位置找到它,基本上总是返回最后一个字符的索引。长度仅比最后一个字符的索引大一。

于 2010-10-22T02:22:18.347 回答
5

为什么需要避免使用 len 函数超出了我的范围,但字符串是可迭代的。你应该能够做到这一点:

strlen = 0

for c in myString:
  strlen += 1
于 2010-10-21T21:38:27.203 回答
3

for您可以通过循环获取字符串的长度。

例如,而不是:

string=input("Enter a string")
print(len(string))

做这个:

string=input("Enter a string")
a=0
for letter in string:
  a=a+1
print(a)
于 2015-05-06T21:56:37.250 回答
3

使用 while 循环

a = 'string'
count = 0

while True:
    try:
        if a[count]:
            count += 1
    except IndexError as e:
        break

print(count)
于 2018-12-10T18:59:06.523 回答
2
>>> import re
>>> s
'mylongstring'
>>> re.subn(".","1",s)[-1]
12
>>>

如果字符串包含新行

>>> s="mys\ntring\n"
>>> re.compile(".",re.DOTALL).subn("",s)[-1]
10
于 2010-10-22T00:24:42.683 回答
2

这是一个奇怪的问题,所以这里有一个奇怪的答案!

try:
  for i in itertools.count(): mystring[i]
except IndexError:
  pass
于 2010-10-21T22:02:32.400 回答
2

从字符串中创建一个类似文件的对象,读取整个对象,然后告诉您的偏移量:

>>> import StringIO
>>> ss = StringIO.StringIO("ABCDEFGHIJ")
>>> ss.read()
'ABCDEFGHIJ'
>>> ss.tell()
10
于 2010-10-22T02:49:05.770 回答
2

尝试这样做,它非常简单易行

def calculate_length(a):
    x=0
    for i in a:
       x+=1
    print(x)
于 2017-11-23T13:48:18.053 回答
2

这是一个既不使用len也不使用迭代的方法:

>>> a = 'a' * 200000
>>> a.rindex(a[-1]) + 1
200000

要使其适用于没有 的列表,请rindex使用:

>>> a = list(range(200000))
>>> a.index(a[-1], -1) + 1
200000
于 2018-08-25T14:05:04.063 回答
1

简单的:

length=0
for x in "This is a string":
    length+=1
print(length)
于 2010-10-21T21:39:33.737 回答
0

效率不高但非常简洁:

def string_length(s):    
    if s == '': return 0
    return 1 + string_length(s[1:])
于 2010-10-22T02:14:38.460 回答
0

这是一种通过计算字符串中空字符串出现次数的方法:

def strlen(s):
    return s.count('') - 1

由于"".count("")返回 1,因此您必须减去 1 才能获得字符串的长度。

于 2010-10-22T02:29:11.310 回答
0
def length(object):#Define the length calculation function

    count = 0  #initializing the length to be equal to zero
    object = input() #enter the argument 

    for i in object:
        count=count+1

    print("Length of the string is"+str(count))

length(object)
于 2016-07-15T00:43:21.690 回答
0

在python中不使用len函数的字符串长度-

def strlen(myStr):
    if(myStr==""):
       return 0
    else:
       return 1+strlen(myStr[1:])
于 2020-07-05T02:46:28.893 回答
-1
a = 'malayalam'
length = 0
for i in a:
    if i == "":
        break
    else:
        length+=1

print length

此代码通过计数直到“”(字符串的结尾)来验证字符串的长度。如果字符串到达​​结尾,则循环中断并返回字符串的最终长度。

于 2015-08-14T14:26:41.987 回答
-2

创建一个 for 循环

styx = "如何在不使用镜头功能的情况下计算这个" number = 0 for c in styx: number = 0 + 1 print(number)

于 2020-11-29T16:58:07.473 回答