比较int值或字符串更快?

时间:2017-04-15 17:52:55

标签: python

我在文件中有一系列值,我正在迭代它们。 运行速度更快:

if FTB == "0":  
  do something  

if int(FTB) > 0:  
  do something  

3 个答案:

答案 0 :(得分:1)

只需在IPython中使用%timeit函数:

FTB = 0

%timeit if FTB == 0: pass
10000000 loops, best of 3: 47 ns per loop

FTB = '0'

%timeit if int(FTB) == 0: pass
The slowest run took 9.47 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 231 ns per loop

如果您打算转换字符串 - >使用int()即时整数,然后看起来你(相对)相当快的速度输掉了。将FTB作为int开始的比较比将字符串FTB强制转换为整数的比较快近80%。

也许你最初的问题是,简单地比较已经输入的对象(比如已经是intstr并且不需要类型转换的东西)是不同的,速度方面,在字符串和整数。在这种情况下,为了完整性:

FTB = '0'

%timeit if FTB == '0': pass
10000000 loops, best of 3: 49.9 ns per loop

FTB = 0

%timeit if str(FTB) == '0': pass
The slowest run took 8.62 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 233 ns per loop

可能需要更多抽样,但天真地说很难说strstrintint之间存在明显的速度差异。最大的成本是调用int()str()函数来更改类型的成本。

答案 1 :(得分:0)

我参加晚会但是这里有一个简单的代码,表明python几乎没有区别。

另外我想到的是整数受到lengt的限制,而字符串可以是任何大小(直到你记忆力不足),这就是我增加大小的原因。

import time


theinteger = 2147483647
thestring = "2147483647"

stringtime = []
integertime = []

for i in range(0,99999):
    t0 = time.time()
    if thestring == "2147483647":
        print("hello")
    t1 = time.time();
    stringtime.append(t1 - t0)


    t0 = time.time()
    if theinteger == 2147483647:
        print("hello")
    t1 = time.time();
    integertime.append(t1 - t0)

    theinteger = theinteger + 1;
    thestring = str(theinteger)

print("time for string: " + str(sum(stringtime)/len(stringtime)))
print("time for integer: " + str(sum(integertime)/len(integertime)))

答案 2 :(得分:-1)

整数比较快,因为在CPU上它只是一个操作。字符串是一组字符的表示。要比较一个String,你必须比较数组中的earch项,直到找到差异。所以这是比较整个String的更多操作。 但差异在几纳秒的范围内。