在Python中将split函数返回的字符串高效转换为整数的方法

56 投票
4 回答
82156 浏览
提问于 2025-04-15 15:06

我有一串数据,格式是这样的:xpos-ypos-zoom(比如8743-12083-15),我想把它拆分开,分别存到变量xpos、ypos和zoom里。因为我需要用这些数字做一些计算,所以我希望一开始就把它们转换成整数。目前,我的做法是用以下代码:

file = '8743-12083-15'
xval, yval, zoom  = file.split("-")
xval = int(xval)
yval = int(yval)

我觉得应该有更有效的方法来做到这一点。有什么好主意吗?

4 个回答

17

注意:你可能想给file取个不同的名字,因为它会覆盖掉内置的功能。

这个在Python 2和3中都可以用。


xval,yval,zval = map(int,file.split('-'))
22

这里的“高效”是指代码行数更少吗?

(xval,yval,zval) = [int(s) for s in file.split('-')]
104

我最初的建议是使用列表推导式。

test = '8743-12083-15'
lst_int = [int(x) for x in test.split("-")]

编辑:

关于哪种方法最有效率(从CPU周期的角度来看),这点总是需要进行测试的。在我使用的Python 2.6版本上进行了一些快速测试,结果显示map可能是这里最有效的选择(从一个用分隔符分开的字符串构建整数列表)。需要注意的是,这些差别非常小,直到你进行数百万次操作时,这才会变得重要(而且这已经被证明是一个瓶颈)……

def v1():
 return [int(x) for x in '8743-12083-15'.split('-')]

def v2():
 return map(int, '8743-12083-15'.split('-'))

import timeit
print "v1", timeit.Timer('v1()', 'from __main__ import v1').timeit(500000)
print "v2", timeit.Timer('v2()', 'from __main__ import v2').timeit(500000)

> output v1 3.73336911201 
> output v2 3.44717001915

撰写回答