【问题标题】:How to split a string of space separated numbers into integers?如何将一串空格分隔的数字拆分为整数?
【发布时间】:2011-09-19 18:06:02
【问题描述】:

我有一个字符串"42 0"(例如),需要得到一个包含两个整数的数组。我可以在空间上使用.split 吗?

【问题讨论】:

    标签: python arrays string split integer


    【解决方案1】:

    使用str.split():

    >>> "42 0".split()  # or .split(" ")
    ['42', '0']
    

    请注意,str.split(" ") 在这种情况下是相同的,但如果一行中有多个空格,则行为会有所不同。同样,.split() 会拆分所有空格,而不仅仅是空格。

    当您想将可迭代项转换为 intfloatstr 等内置函数时,使用 map 通常看起来比使用列表推导更简洁。在 Python 2 中:

    >>> map(int, "42 0".split())
    [42, 0]
    

    在 Python 3 中,map 将返回一个惰性对象。您可以使用list() 将其放入列表中:

    >>> map(int, "42 0".split())
    <map object at 0x7f92e07f8940>
    >>> list(map(int, "42 0".split()))
    [42, 0]
    

    【讨论】:

      【解决方案2】:
      text = "42 0"
      nums = [int(n) for n in text.split()]
      

      【讨论】:

      • int(n) 如果顺便说一句不起作用,可能会引发 ValueError
      【解决方案3】:
      l = (int(x) for x in s.split())
      

      如果你确定总是有两个整数,你也可以这样做:

      a,b = (int(x) for x in s.split())
      

      或者如果您打算在之后修改数组

      l = [int(x) for x in s.split()]
      

      【讨论】:

        【解决方案4】:

        这应该可行:

        [ int(x) for x in "40 1".split(" ") ]
        

        【讨论】:

          【解决方案5】:

          当然你可以调用split,但它会返回字符串,而不是整数。做

          >>> x, y = "42 0".split()
          >>> [int(x), int(y)]
          [42, 0]
          

          [int(x) for x in "42 0".split()]
          

          【讨论】:

            【解决方案6】:

            其他答案已经表明您可以使用split() 将值放入list。如果你问的是 Python 的 arrays,这里有一个解决方案:

            import array
            s = '42 0'
            a = array.array('i')
            for n in s.split():
                a.append(int(n))
            

            编辑:更简洁的解决方案:

            import array
            s = '42 0'
            a = array.array('i', (int(t) for t in s.split()))
            

            【讨论】:

              【解决方案7】:

              您可以拆分并确保子字符串是单行中的数字:

              In [1]: [int(i) for i in '1 2 3a'.split() if i.isdigit()]
              Out[1]: [1, 2]
              

              【讨论】:

                【解决方案8】:

                给定:text = "42 0"

                import re
                numlist = re.findall('\d+',text)
                
                print(numlist)
                
                ['42', '0']
                

                【讨论】:

                • 我认为这对这个具体的例子有帮助,但很高兴看到关于空间分割能力的答案。
                • 问题要求提供 ints 的列表,而不是 strings...
                【解决方案9】:

                使用numpy的fromstring:

                import numpy as np
                
                np.fromstring("42 0", dtype=int, sep=' ')
                
                >>> array([42,  0])
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多