如何将一串空格分隔的数字拆分为整数?

问题描述 投票:0回答:9

我有一个字符串

"42 0"
(例如),需要获取两个整数的数组。我可以在空间上做
.split
吗?


编者注:

解决这个问题的明显方法是简单任务的常见组合:

但是,根据具体要求,可以通过其他方式解决。对于某些情况,分割步骤本身可能就足够了。除了本机 Python

list
之外,还有其他方法(在此处的一些答案中给出)可以生成不同的输出 - 例如,使用标准库
array.array
或 Numpy 数组。

或者,这个问题可以看作是 如何从 Python 中的字符串中提取数字? .

的特例
python arrays string split integer
9个回答
150
投票

使用

str.split()

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

请注意,在这种情况下

str.split(" ")
是相同的,但如果一行中有多个空格,则表现会有所不同。同样,
.split()
会分割所有空白,而不仅仅是空格。

当您想要将可迭代项转换为内置项(如

map
int
float
等)时,使用
str
通常看起来比使用列表推导式更干净。在 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]

70
投票
text = "42 0"
nums = [int(n) for n in text.split()]

13
投票
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()]

8
投票

这应该有效:

[ 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()]

3
投票

其他答案已经表明您可以使用 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()))

3
投票

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

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

0
投票

给出:

text = "42 0"

import re
numlist = re.findall('\d+',text)

print(numlist)

['42', '0']

0
投票

使用numpy的

fromstring

import numpy as np

np.fromstring("42 0", dtype=int, sep=' ')
>>> array([42,  0])
© www.soinside.com 2019 - 2024. All rights reserved.