将由空格分隔的整数字符串更改为 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()))
如果您需要整数,这将创建一个 list
的 int
。
【讨论】:
对于你只需要的字符串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 列表? [复制]