【问题标题】:Counting how many numbers are in a string计算一个字符串中有多少个数字
【发布时间】:2013-11-01 02:17:18
【问题描述】:

下面应该是一个相当简单的计数/长度需求,但是我不知道如何让它工作......

示例代码

tl1 = "2, 5, 11"
tl2 = "2, 5, 11, 29, 48, 1, 492, 2993, 91, 8, 8, 3"
tl3 = "9382938238"
print len(tl1)
print len(tl2)
print len(tl3)

它返回什么:

8
43
1

它应该(对我)返回什么::

3
12
1

知道如何实现我想要的回报吗?

谢谢
- 海福克斯

【问题讨论】:

    标签: python python-2.7 count string-length


    【解决方案1】:

    您的问题是在string 中,空格和字符计入长度。

    所以,这个变量的长度,是一个字符串:

    string = '123 abc'
    

    是 7,因为空间很重要。

    现在,要获得您要查找的结果,您需要将字符串更改为列表,这是一组逗号分隔的值。请注意,我们没有将列表命名为“list”,因为list() 是 python 中的一个函数:

    lst = ['2','5','11']
    

    现在,当我们检查列表的长度时:

    >>> print len(lst)
    3
    

    我们得到'3'作为结果

    让你的字符串看起来像上面的列表:

    >>> tl1 = "2, 5, 11"
    >>> print tl1.split(',')
    ['2','5','11']
    

    然后你可以使用len()检查长度

    【讨论】:

      【解决方案2】:

      字符串的长度是字符串中的字符数。

      使用str.split 和逗号(','):

      >>> tl1 = "2, 5, 11"
      >>> tl2 = "2, 5, 11, 29, 48, 1, 492, 2993, 91, 8, 8, 3"
      >>> tl3 = "9382938238"
      
      >>> tl1.split(',')
      ['2', ' 5', ' 11']
      
      >>> len(tl1.split(','))
      3
      >>> len(tl2.split(','))
      12
      >>> len(tl3.split(','))
      1
      

      【讨论】:

        【解决方案3】:

        你可以用正则表达式很容易地做到这一点:

        >> import re
        >> result = re.split(r'\D+', '1, 2, 35')
        >> result
           ['1', '2', '35']
        >> len(result)
           3
        

        如果你需要支持浮点数或其他的东西,它会稍微复杂一些,但正则表达式仍然是要走的路。

        【讨论】:

          【解决方案4】:

          如果你所有的字符串都是这样的,那么你可以简单地使用一个字符串的.split方法:

          >>> tl1 = "2, 5, 11"
          >>> tl2 = "2, 5, 11, 29, 48, 1, 492, 2993, 91, 8, 8, 3"
          >>> tl3 = "9382938238"
          >>> len(tl1.split())
          3
          >>> len(tl2.split())
          12
          >>> len(tl3.split())
          1
          >>>
          

          .split 默认拆分为空白字符。如果数字之间有可能超过 1 个空格,您也可以在 , 上拆分。

          【讨论】:

            【解决方案5】:

            这是一种方法:

            tl1 = "2, 5, 11"
            tl2 = "2, 5, 11, 29, 48, 1, 492, 2993, 91, 8, 8, 3"
            tl3 = "9382938238"
            
            for t in (tl1,tl2,tl3):
                print len([x for x in t.split(',') if x.strip().isdigit()])
            

            打印:

            3
            12
            1
            

            这样做的好处是计算实际整数,而不仅仅是拆分项的数量:

            >>> tl4 = '1, 2, a, b, 3, 44'   # 4 numbers, 5 commas, 6 items (numbers and letters)
            >>> len(tl4.split(','))
            6                               # that numbers and letters...
            >>> len([x for x in tl4.split(',') if x.strip().isdigit()])
            4                               # integer fields only
            

            【讨论】:

              猜你喜欢
              • 2019-11-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-16
              • 1970-01-01
              • 1970-01-01
              • 2021-12-26
              • 1970-01-01
              相关资源
              最近更新 更多