我有一系列具有以下格式的数据:xpos-ypos-zoom(即8743-12083-15)我想要拆分并存储在变量xpos,ypos和zoom中。因为我需要用这些数字进行一些计算,所以我想从一开始就将它们转换为整数。目前,我这样做的方式是使用以下代码:
file = '8743-12083-15'
xval, yval, zoom = file.split("-")
xval = int(xval)
yval = int(yval)
在我看来应该有一种更有效的方法。有什么想法吗?
答案 0 :(得分:56)
我对列表理解的原始建议。
test = '8743-12083-15'
lst_int = [int(x) for x in test.split("-")]
修改强>
哪个是最有效的(cpu-cyclewise)应该始终进行测试。 对我的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
答案 1 :(得分:13)
在更少的代码行中效率很高?
(xval,yval,zval) = [int(s) for s in file.split('-')]
答案 2 :(得分:9)
您可以在每个子字符串上map
使用int
函数,或使用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,否则不需要调用list
。 (在Python 2.x map
中返回一个列表,在Python 3.x中它返回一个生成器。)
也可以直接分配三个变量(在这种情况下,generator expression而不是列表理解会这样做):
>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)
答案 3 :(得分:7)
注意:您可能希望为file
选择一个不同的名称,因为它会影响buildtin
这适用于Python 2和3
xval,yval,zval = map(int,file.split('-'))