比较两个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()检索的字典值,其中大部分都是字符串。
答案 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
结论:你可能已经做得很快就足够了。在一切正常后,优化程序中最慢的部分。