我正在研究这个编码难题,并且必须将字符串中的某些数字转换为整数才能使用它们。一个例子是
('2 -5 7 8 10 -205')
我尝试做的是将数字添加到空字符串,并在有空格时将它们转换为int。这是代码。
n是数字串的长度 num是我添加数字的空字符串。原来是num =“”
while i<n:
if temps[i]!=' ':
num=num+temps[i]
elif temps[i]==' ':
print type(num)
x=int(num)
问题是当它运行时我得到一行错误,x = int(num)表示
ValueError: invalid literal for int() with base 10: ''
当我打印num时,我只是以字符串格式获取数字,所以我不明白什么是错的。非常感谢帮助,如果您有任何疑问或需要澄清,请询问。
由于
答案 0 :(得分:6)
使用str.split()
在空格处拆分字符串,然后将int
应用于每个元素:
s = '2 -5 7 8 10 -205'
nums = [int(num) for num in s.split()]
答案 1 :(得分:1)
如果您的字符串如下所示:
s = '2 -5 7 8 10 -205'
您可以使用列表推导创建整数列表。首先,您将在空格上拆分字符串,并分别解析每个条目:
>>> [int(x) for x in s.split(' ')]
[2, -5, 7, 8, 10, -205] ## list of ints
答案 2 :(得分:1)
你可以用列表理解来做到这一点:
data = ('2 -5 7 8 10 -205')
l = [int(i) for i in data.split()]
print(l)
[2, -5, 7, 8, 10, -205]
或者您也可以使用map
功能:
list(map(int, data.split()))
[2, -5, 7, 8, 10, -205]
<强>基准强>:
In [725]: %timeit list(map(int, data.split()))
100000 loops, best of 3: 2.1 µs per loop
In [726]: %timeit [int(i) for i in data.split()]
100000 loops, best of 3: 2.54 µs per loop
因此,使用地图可以更快地运作
注意:list
已添加到地图中,因为我使用的是python 3.x.如果您正在使用python 2.x,那么您就不需要它了。
答案 3 :(得分:1)
内置方法也可以完成这项工作:
>>> s = '2 -5 7 8 10 -205'
>>> map(int, s.split())
[2, -5, 7, 8, 10, -205]
如果是Python 3 +:
>>> s = '2 -5 7 8 10 -205'
>>> list(map(int, s.split()))
[2, -5, 7, 8, 10, -205]
答案 4 :(得分:0)
您应该尝试将任务拆分为2个子任务:
作为一般建议 - 您还应阅读文档,以便通过将一个函数的输出链接作为下一个函数的输入来确定可以节省多少辛苦工作。