Python中将字符串从split函数转换为int的有效方法

2024-05-28 23:47:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组数据,格式如下:xpos ypos zoom(即8743-12083-15),我想将其拆分并存储在变量xpos、ypos和zoom中。因为我需要对这些数字进行一些计算,所以我想从一开始就把它们转换成整数。目前,我的方法是使用以下代码:

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

在我看来,应该有更有效的方法来做这件事。有什么想法吗?


Tags: 数据方法代码格式数字整数fileint
3条回答

您可以在每个子字符串上^{}函数^{},或者使用list comprehension

>>> file = '8743-12083-15'
>>> list(map(int, file.split('-')))
[8743, 12083, 15]
>>> [int(d) for d in file.split('-')]
[8743, 12083, 15]

在上面的代码中,不需要调用^{},除非使用Python 3.x(在Python 2.x中map返回一个列表,在python3.x中返回一个生成器)

也可以直接分配给三个变量(在这种情况下,可以使用generator expression而不是列表理解):

>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)

我最初的建议有一个清单理解。

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

在更少的代码行中高效?

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

相关问题 更多 >

    热门问题