Python有效地将字符串与其等效整数进行比较

时间:2011-09-08 04:32:35

标签: python

比较两个python值的最有效方法是什么,这两个值都可能是字符串,但可能是整数。到目前为止我使用的是str(x)== str(y),但感觉效率低下(更重要的是)丑陋:

>>> a = 1.0
>>> b = 1
>>> c = '1'
>>> a == b
True
>>> b == c
False  # here I wanted this to be true
>>> str(b)==str(c)
True   # true, as desired

我的实际对象是使用get()检索的字典值,其中大部分都是字符串。

2 个答案:

答案 0 :(得分:5)

测试一下。我喜欢在%timeit中使用ipython

In [1]: %timeit str("1") == str(1)
1000000 loops, best of 3: 702 ns per loop

In [2]: %timeit "1" == str(1)
1000000 loops, best of 3: 412 ns per loop

In [3]: %timeit int("1") == 1
1000000 loops, best of 3: 906 ns per loop

除此之外,如果您真的不知道输入类型是什么,除非您想对输入数据做出假设,否则您无能为力。例如,如果您假设大多数输入相同(相同类型,相同值),您可以执行以下操作:

if a == b or str(a) == str(b):
    ... they are equal ...

如果它们通常是相同类型并且通常相等,那么更快......但如果它们通常不是同一类型,或者通常不相等,它会慢一些。< / p>

但是,您确定在输入代码时无法将所有内容都转换为str / int吗?

答案 1 :(得分:1)

wim@wim-acer:~/sandpit$ python -mtimeit "str('69') == str(69)"
1000000 loops, best of 3: 0.28 usec per loop
wim@wim-acer:~/sandpit$ python -mtimeit "int('69') == int(69)"
1000000 loops, best of 3: 0.5 usec per loop
wim@wim-acer:~/sandpit$ python -mtimeit "str('32767') == str(32767)"
1000000 loops, best of 3: 0.317 usec per loop
wim@wim-acer:~/sandpit$ python -mtimeit "int('32767') == int(32767)"
1000000 loops, best of 3: 0.492 usec per loop

结论:你可能已经做得很快就足够了。在一切正常后,优化程序中最慢的部分。