【问题标题】:String length without len function不带 len 函数的字符串长度
【发布时间】:2011-04-28 21:03:07
【问题描述】:

谁能告诉我如何在不使用len() 函数或任何字符串方法的情况下获取字符串的长度。请任何人告诉我,因为我正在疯狂地敲着头寻找答案。
谢谢。

【问题讨论】:

  • 100% 肯定是的,因为那里有不想使用len()的要求
  • 嗨,我怎么能吃东西,但不把食物放在嘴里,静脉输液被认为是作弊,请任何人帮助我,我要疯了
  • 应该要求作业问题必须包括学生到目前为止的尝试,否则应该以“作业没有提供到目前为止的进步”的精神来关闭它们。提供答案只会获得一些声誉积分,但会使学生未来的成绩无效。
  • 我认为没有理由投反对票,即使是作业,第一个答案得到 16 票赞成,这意味着@GlennMaynard
  • 似乎有些教授希望学生以“错误的方式”做事,以从内部运作中学习......不幸的后果是程序令人恼火和混乱。如果这是一个促进学习的地方,那么我不同意这是一个坏问题的态度。我同意@mou。

标签: python string-length


【解决方案1】:

创建一个for循环

styx = "不使用镜头功能如何计算" 数字 = 0 对于 styx 中的 c: 数字 = 0 + 1 打印(数字)

【讨论】:

  • number = 0 + 1 将如何工作?这个答案是不正确的,也是多余的,例如,请参阅 this answer 做与您想展示的一样的事情。
【解决方案2】:

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

def strlen(myStr):
    if(myStr==""):
       return 0
    else:
       return 1+strlen(myStr[1:])

【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案4】:

      使用while循环

      a = 'string'
      count = 0
      
      while True:
          try:
              if a[count]:
                  count += 1
          except IndexError as e:
              break
      
      print(count)
      

      【讨论】:

        【解决方案5】:

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

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

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

        >>> a = list(range(200000))
        >>> a.index(a[-1], -1) + 1
        200000
        

        【讨论】:

          【解决方案6】:

          试试这个,很简单很容易

          def calculate_length(a):
              x=0
              for i in a:
                 x+=1
              print(x)
          

          【讨论】:

            【解决方案7】:
            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)
            

            【讨论】:

            【解决方案8】:
            a = 'malayalam'
            length = 0
            for i in a:
                if i == "":
                    break
                else:
                    length+=1
            
            print length
            

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

            【讨论】:

            • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
            • 这与多个现有答案基本上是相同的解决方案,更糟糕的是if 是完全不必要的(并表明您不知道在 python 中迭代字符串是如何工作的)。为什么你要对一个已经被详尽回答的 5 年前的问题发布一个糟糕的答案?
            【解决方案9】:
            >>> 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
            >>> 
            

            【讨论】:

              【解决方案10】:

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

              >>> import StringIO
              >>> ss = StringIO.StringIO("ABCDEFGHIJ")
              >>> ss.read()
              'ABCDEFGHIJ'
              >>> ss.tell()
              10
              

              【讨论】:

                【解决方案11】:

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

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

                由于"".count("") 返回 1,所以必须减去 1 才能得到字符串的长度。

                【讨论】:

                • countstr 方法 --- BBBZZZZZZTTTTT
                • John Machin:肯定所有其他解决方案都隐式调用strsome 方法。作业只说不要使用string 方法。
                【解决方案12】:

                这是一个 O(1) 方法:

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

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

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

                【讨论】:

                • rindexstr 方法--- BBBZZZZZZTTTTT
                • John Machin:str 方法有什么问题? OP 只说不要使用 string 方法。
                【解决方案13】:

                效率不高但非常简洁:

                def string_length(s):    
                    if s == '': return 0
                    return 1 + string_length(s[1:])
                

                【讨论】:

                • @gnibbler 巨著的变体。
                【解决方案14】:
                >>> import re
                >>> s
                'mylongstring'
                >>> re.subn(".","1",s)[-1]
                12
                >>>
                

                如果字符串包含新行

                >>> s="mys\ntring\n"
                >>> re.compile(".",re.DOTALL).subn("",s)[-1]
                10
                

                【讨论】:

                • 如果字符串包含换行符则不起作用!你需要 re.DOTANY 标志。
                【解决方案15】:

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

                try:
                  for i in itertools.count(): mystring[i]
                except IndexError:
                  pass
                

                【讨论】:

                  【解决方案16】:

                  简单:

                  length=0
                  for x in "This is a string":
                      length+=1
                  print(length)
                  

                  【讨论】:

                  • 嘿,这太酷了,但你能告诉我这是如何在字符串范围内工作的,因为我们真的不知道范围和在 for 循环中如何将其解释为整数
                  • Python 字符串基本上是一个字符列表。所以在这段代码中,它循环遍历字符串中的每个字符并将计数器加 1(在本例中为长度)。如果您想查看它是如何工作的,请在 length+=1 行之前添加 print(x)。
                  【解决方案17】:

                  为什么要避免使用 len 函数超出了我的理解,但字符串是可迭代的。你应该可以这样做:

                  strlen = 0
                  
                  for c in myString:
                    strlen += 1
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-05-12
                    • 2013-05-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-03-11
                    • 1970-01-01
                    • 2011-05-17
                    相关资源
                    最近更新 更多