【问题标题】:Change a string of integers separated by spaces to a list of int将由空格分隔的整数字符串更改为 int 列表
【发布时间】:2013-11-02 13:01:55
【问题描述】:

我如何制作类似的东西

x = '1 2 3 45 87 65 6 8'

>>> foo(x)
[1,2,3,45,87,65,6,8]

我完全卡住了,如果我按索引来做,那么超过 1 位的数字将被分解。请帮忙。

【问题讨论】:

    标签: python string list int


    【解决方案1】:

    最简单的解决方案是使用.split()创建字符串列表:

    x = x.split()
    

    或者,您可以将列表推导与.split() 方法结合使用:

    x = [int(i) for i in x.split()]
    

    您甚至可以使用 map map 作为第三种选择:

    x = list(map(int, x.split()))
    

    如果您需要整数,这将创建一个 listint

    【讨论】:

    • 对于你只需要的字符串x = x.split()
    • 注意:map() 在 Python 2 中只返回一个列表。在 Python 3 中,返回一个迭代器对象;如果您必须有一个列表,请使用list(map(int, x.split()))
    【解决方案2】:

    只是为了解释清楚。

    您可以使用字符串方法str.split() 将字符串拆分为列表。你可以了解更多关于这个方法here

    例子:

    def foo(x):
        x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed.
        for i, v  in enumerate(x): #Loop through the list
            x[i] = int(v) #convert each element of v to an integer
    

    应该这样做!

    >>> x
    [1, 2, 3, 45, 87, 65, 6, 8]
    

    【讨论】:

    • enumerate 不是这样工作的……它将索引和给定索引处的值作为元组返回。此代码将在 任一 int(i)x.index(i) 上失败。
    • @SethMMorton 对此非常抱歉。更新了我的答案。
    【解决方案3】:

    一条简单的线可以是...

    print (map(int, x.split()))  
    

    有人明智地纠正了我,在 python >=3 中,它应该变成,

    print(list(map(int,x.split())))  
    

    也可以是早期版本的用户。

    【讨论】:

    • 请注意,在 python3 中,map 返回一个 map 对象,因此您需要在其上调用 list 以将其转换为列表。
    【解决方案4】:

    不用担心,因为python提供了split()函数来将字符串变成一个列表。

    x='1 2 3 4 67 8 9'
    x.split()
    

    ['1', '2', '3', '4', '67', '8']

    或者如果你想以整数形式输出,那么你可以使用 map 函数

    map(int ,x.split(' '))
    

    [1, 2, 3, 4, 67, 8]

    【讨论】:

    • 注意:map() 在 Python 2 中只返回一个列表。在 Python 3 中,返回一个迭代器对象;如果您必须有一个列表,请使用list(map(int, x.split()))
    【解决方案5】:

    如果输入在字符串的开头或结尾有空格,或者在上面的项目之间用多个不均匀的空格分隔,s.split(' ') 也会返回空项目:

    >>> s=' 1 2  3 4 67 8 9 ' 
    >>> list(s.split(' '))
    ['', '1', '2', '', '3', '4', '67', '8', '9', '']
    

    我最好避免指定分隔符:

    >>> list(s.split())
    ['1', '2', '3', '4', '67', '8', '9']
    

    如果可选的第二个参数 sep 不存在或为 None,则单词由任意字符串分隔(空格、制表符、换行符、回车符、换页符)。

    如果你只想在空格处分割,空字符串可以很容易地过滤掉:

    >>> [item for item in s.split(' ') if item]
    ['1', '2', '3', '4', '67', '8', '9']
    

    【讨论】:

      【解决方案6】:

      假设您的输入中只有数字,您可以有如下内容:

      >>> x = '1 2 3 45 87 65 6 8'
      >>> num_x = map(int, filter(None, x.split(' ')))
      >>> num_x
      [1 2 3 45 87 65 6 8]
      

      当数字被多个空格字符分隔或输入的前面或后面有空格字符时,这将处理这种情况。类似于以下内容:

      >>> x = ' 1 2 3  4 '
      >>> num_x = map(int, filter(None, x.split(' ')))
      >>> num_x
      [1, 2, 3, 4]
      

      您也可以将输入替换为 x.split(' ') 以匹配其他分隔符类型,例如,; 等。

      【讨论】:

        【解决方案7】:

        如果你想从第零个位置创建一个列表:

        x = '1 2 3 4 5 6 7'
        result = x.split(" ")[0:]
        print(result)
        

        结果将是:

        ['1', '2', '3', '4', '5', '6', '7']
        

        【讨论】:

          【解决方案8】:
          x = '1 2 3 45 87 65 6 8'
          
          new_list = []
          for i in x.split(" "):
              new_list.append(int(i))
          

          输出:

          >>> x
          [1, 2, 3, 45, 87, 65, 6, 8]
          

          【讨论】:

            猜你喜欢
            • 2018-02-16
            • 1970-01-01
            • 2016-12-17
            • 2018-07-21
            • 1970-01-01
            • 1970-01-01
            • 2021-03-13
            • 1970-01-01
            相关资源
            最近更新 更多