【问题标题】:how to count characters in a string without the white spaces using python?如何使用python计算没有空格的字符串中的字符?
【发布时间】:2020-04-01 11:37:04
【问题描述】:

我创建了一个函数来计算字符串中的字符数,但它也计算空格。

这是我的代码:

def count_characters_in_string(mystring):
    string_1 = mystring
    print("The number of characters in this string is:", len(string_1))
count_characters_in_string("Apples and Bananas")

有没有办法不计算空格?

【问题讨论】:

  • len(string_1.replace(' ',''))?

标签: python python-3.x string count character


【解决方案1】:

这不会在内存中创建虚假的liststr,使用sumstr.isspace,以及issubclass(bool, int) 的事实:

def count_characters_in_string(mystring):
    return sum(not c.isspace() for c in mystring)

【讨论】:

    【解决方案2】:

    你可以split字符串(不指定分隔符表示根据任意空格分割),然后对得到的字符串的长度求和

    def count_characters_in_string(string):
        return sum([len(word) for word in string.split()])
    
    print("The number of characters in this string is:", count_characters_in_string("Apples and Bananas"))
    

    编辑:根据@schwobaseggl 的有用建议,我创建了该函数的 3 个版本并对其进行计时,以发现 map 选项实际上是最快的

    def count_characters_in_string(string):
        return sum([len(word) for word in string.split()])
    
    def count_characters_in_string_gen(string):
        return sum(len(word) for word in string.split())
    
    def count_characters_in_string_map(string):
        return sum(map(len, string.split()))
    
    
    %timeit count_characters_in_string("Apples and Bananas")
    718 ns ± 21.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit count_characters_in_string_gen("Apples and Bananas")
    812 ns ± 13.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit count_characters_in_string_map("Apples and Bananas")
    607 ns ± 19.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    【讨论】:

    • 如果您使用生成器而不是列表理解,我会更喜欢那个 ;-) 甚至 sum(map(len, string.split()))
    • 有趣的分析。没有太大的明显区别。纯粹出于美学原因,我更喜欢生成器而不是comp:D
    【解决方案3】:

    使用这个:

    def count_characters_in_string(input_string):
    
        letter_count = 0
    
        for char in input_string:
            if char.isalpha():
                letter_count += 1
    
        print("The number of characters in this string is:", letter_count)
    

    这也可以:

    def count_characters_in_string(input_string):
    
        letter_count = len(input_string.replace(" ",""))
    
        print("The number of characters in this string is:", letter_count)
    

    然后运行时:

    count_characters_in_string("Apple Banana")
    

    它会输出:

    "The number of characters in this string is: 11"
    

    【讨论】:

      【解决方案4】:

      你可以做一个简单的事情,用相同的字符串创建一个新变量,替换该字符串上的所有空格,然后得到两个字符串的长度并得到差异。

      string1 = "asd asd asd asd asd"
      string2 = string1
      string2.replace(" ", "")
      size1 = len(string1)
      size2 = len(strgin2)
      size3 = size1 - size2
      

      干杯

      【讨论】:

        【解决方案5】:

        你对list comprehension中的len有什么看法?

        def count_characters_in_string(mystring):
            return len([character for character in mystring if character.isalpha()])
        

        【讨论】:

          【解决方案6】:

          其中一个解决方案可能是遍历字符并检查它是否不是空格,然后按如下方式递增计数:

          def count_characters_in_string(mystring):
              count = 0
              for x in mystring:
                  if x !=' ':
                      count+=1
              return count
          
          res = count_characters_in_string("Apples and Bananas")
          print(res)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-12
            • 1970-01-01
            • 1970-01-01
            • 2020-09-14
            • 2022-10-24
            相关资源
            最近更新 更多