首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中字符串到整数的快速转换

Python中字符串到整数的快速转换
EN

Stack Overflow用户
提问于 2009-08-20 22:11:33
回答 7查看 10.9K关注 0票数 5

实际上,这是一个简单的问题:在TSV (制表符分隔值)文件中,有10亿个(1e+9)无符号32位整数以十进制ASCII字符串的形式存储。与处理同一数据集的其他工具相比,使用int()的转换速度非常慢。为什么?更重要的是:如何让它更快?

因此,问题是:在Python中,将字符串转换为整数的最快方法是什么?

我真正考虑的是一些半隐藏的Python功能,可以(Ab)用于此目的,就像Guido在他的"Optimization Anecdote"中使用array.array一样。

示例数据(具有扩展到空格的选项卡)

代码语言:javascript
复制
38262904        "pfv"              2002-11-15T00:37:20+00:00
12311231        "tnealzref"        2008-01-21T20:46:51+00:00
26783384        "hayb"             2004-02-14T20:43:45+00:00
812874          "qevzasdfvnp"      2005-01-11T00:29:46+00:00
22312733        "bdumtddyasb"      2009-01-17T20:41:04+00:00

读取数据所花费的时间在这里是无关紧要的,处理数据是瓶颈。

Microbenchmarks

以下所有语言都是解释型语言。主机运行的是64位Linux。

Python 2.6.2,IPython 0.9.1,每秒约214k转换(100%):

代码语言:javascript
复制
In [1]: strings = map(str, range(int(1e7)))

In [2]: %timeit map(int, strings);
10 loops, best of 3: 4.68 s per loop

REBOL 3.0版本2.100.76.4.2,~231kcps (108%):

代码语言:javascript
复制
>> strings: array n: to-integer 1e7 repeat i n [poke strings i mold (i - 1)]
== "9999999"

>> delta-time [map str strings [to integer! str]]
== 0:00:04.328675

REBOL 2.7.6.4.2 (15-Mar-2008),~523kcps (261%):

正如约翰在评论中指出的那样,这个版本没有构建转换后的整数列表,因此给定的速度比相对于Python4.99s运行时的for str in strings: int(str)

代码语言:javascript
复制
>> delta-time: func [c /local t] [t: now/time/precise do c now/time/precise - t]

>> strings: array n: to-integer 1e7 repeat i n [poke strings i mold (i - 1)]
== "9999999"

>> delta-time [foreach str strings [to integer! str]]
== 0:00:01.913193

KDB+ 2.6t 2009.04.15,~2016kcps (944%):

代码语言:javascript
复制
q)strings:string til "i"$1e7

q)\t "I"$strings
496
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1309123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档