2024-05-28 23:47:30 发布
网友
我有一组数据,格式如下:xpos ypos zoom(即8743-12083-15),我想将其拆分并存储在变量xpos、ypos和zoom中。因为我需要对这些数字进行一些计算,所以我想从一开始就把它们转换成整数。目前,我的方法是使用以下代码:
file = '8743-12083-15' xval, yval, zoom = file.split("-") xval = int(xval) yval = int(yval)
在我看来,应该有更有效的方法来做这件事。有什么想法吗?
您可以在每个子字符串上^{}函数^{},或者使用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中返回一个生成器)
map
也可以直接分配给三个变量(在这种情况下,可以使用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('-')]
您可以在每个子字符串上^{} 函数^{} ,或者使用list comprehension:
在上面的代码中,不需要调用^{} ,除非使用Python 3.x(在Python 2.x中
map
返回一个列表,在python3.x中返回一个生成器)也可以直接分配给三个变量(在这种情况下,可以使用generator expression而不是列表理解):
我最初的建议有一个清单理解。
编辑:
至于哪一个是最有效的(cpu周期)是应该经常测试的。 在我的Python 2.6安装中进行的一些快速测试表明,map可能是这里最有效的候选者(从值拆分字符串构建整数列表)。请注意,差异是如此之小,以至于这并不真正重要,直到你做了数百万次(这是一个被证明的瓶颈)。。。
在更少的代码行中高效?
相关问题 更多 >
编程相关推荐