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

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

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

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

在我看来应该有一种更有效的方法来做到这一点。有什么想法吗?

python variables casting
4个回答
107
投票

我的建议是列表理解。

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)

输出:

v1 3.73336911201 
v2 3.44717001915

23
投票

代码行数更少,效率更高?

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

17
投票

注意:您可能需要为

file
选择一个不同的名称,因为它会遮盖 buildtin

这适用于 Python 2 和 3


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

14
投票

您可以对每个子字符串使用

map
函数
int
,或使用列表理解

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

在上面,不需要调用

list
,除非使用 Python 3.x。 (在 Python 2.x 中
map
返回一个列表,在 Python 3.x 中返回一个生成器。)

直接分配给三个变量也是可能的(在这种情况下,可以使用生成器表达式而不是列表理解):

>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)
© www.soinside.com 2019 - 2024. All rights reserved.