没有len函数的字符串长度

sam*_*sam 1 python string-length

任何人都可以告诉我如何在不使用len()函数或任何字符串方法的情况下获取字符串的长度.请有人告诉我,因为我疯狂地试着回答.
谢谢.

Joh*_*ooy 20

>>> 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
Run Code Online (Sandbox Code Playgroud)

一个"绕口令"

>>> sum(not out not in out for out in "shake it all about")
18
Run Code Online (Sandbox Code Playgroud)

一些递归解决方案

>>> 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
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 虽然可能不是最好的答案,但这会赢得"最酷的答案". (3认同)

Gab*_*abe 6

这是一个O(1)方法:

def strlen(s):
    if s == "": return 0
    return s.rindex(s[-1]) + 1
Run Code Online (Sandbox Code Playgroud)

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

它通过查看最后一个字符并从最末端搜索来找到该字符.因为它是最后一个字符,它总是在它看起来的第一个地方找到它,基本上总是返回最后一个字符的索引.长度只比最后一个字符的索引多一个.

  • John Machin:`str`方法有什么问题?OP只表示不使用`string`方法. (2认同)

g.d*_*d.c 5

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

strlen = 0

for c in myString:
  strlen += 1
Run Code Online (Sandbox Code Playgroud)