我有一个字符串
"42 0"
(例如),需要获取两个整数的数组。我可以在空间上做 .split
吗?
编者注:
解决这个问题的明显方法是简单任务的常见组合:
但是,根据具体要求,可以通过其他方式解决。对于某些情况,分割步骤本身可能就足够了。除了本机 Python
list
之外,还有其他方法(在此处的一些答案中给出)可以生成不同的输出 - 例如,使用标准库 array.array
或 Numpy 数组。
或者,这个问题可以看作是 如何从 Python 中的字符串中提取数字? .
的特例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]
text = "42 0"
nums = [int(n) for n in text.split()]
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()]
这应该有效:
[ int(x) for x in "40 1".split(" ") ]
当然你可以调用
split
,但它会返回字符串,而不是整数。做
>>> x, y = "42 0".split()
>>> [int(x), int(y)]
[42, 0]
或
[int(x) for x in "42 0".split()]
您可以拆分并确保子字符串是单行中的数字:
In [1]: [int(i) for i in '1 2 3a'.split() if i.isdigit()]
Out[1]: [1, 2]
给出:
text = "42 0"
import re
numlist = re.findall('\d+',text)
print(numlist)
['42', '0']