将由空格分隔的整数字符串更改为 int 列表

Posted

技术标签:

【中文标题】将由空格分隔的整数字符串更改为 int 列表【英文标题】:Change a string of integers separated by spaces to a list of 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 位的数字将被分解。请帮忙。

【问题讨论】:

【参考方案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]

【讨论】:

以上是关于将由空格分隔的整数字符串更改为 int 列表的主要内容,如果未能解决你的问题,请参考以下文章

将由空格分隔的未知数量的整数读入每行一个向量

如何将空格和逗号分隔的数字字符串转换为 int 列表? [复制]

python中,如何将字符串中的多个不等量空格改为改为逗号分隔?

如何将由空格分隔的一串数字放入数组中? [复制]

如何在由科学记数法组成的列表中将字符串更改为 int

如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?