如果列表为空,则Python返回False

时间:2016-09-11 06:39:03

标签: python

在一个编码示例中,我看到以下代码段,如果列表为空则返回 True False

return a == []

原因是为了避免写作

if a:
    return False
else:
    return True

在一个有数千个条目的真实例子中,我应该注意哪些速度差异?

2 个答案:

答案 0 :(得分:4)

没有。两种情况都没有速度差异。因为在这两种情况下都会先检查列表的length。 在第一种情况下,在进行任何进一步比较之前,len alen的{​​{1}}进行比较。大多数时候[]应该不同,所以测试只是立即返回。

但更加pythonic的方式是len或使用return not a转换它然后返回它:

bool

答案 1 :(得分:2)

如果你问一个函数放入哪个方法会更快(因此return),那么我使用timeit模块进行一些测试。我将每个方法放在一个函数中,然后运行程序以查看哪个函数运行得更快。这是程序:

import timeit

def is_empty2():
    a = []
    if a:
        return True
    else:
        return False

def is_empty1():
    a = []
    return a == []


print("Time for method 2:")
print(timeit.timeit(is_empty2))
print("")
print("Time for method 1:")
print(timeit.timeit(is_empty1))

我运行程序五次,每次记录每个功能的速度。在得到每次的平均值后,这就是我想出的:

method one speed(milliseconds): 0.2571859563796641
-----------------------------   ------------------
method two speed(milliseconds): 0.2679253742685615

至少从我上面的测试中,您在问题中描述的第一种方法稍微比第二种方法快。当然,上述数字可能会根据这两个函数的确切内容而发生巨大变化。

然而,我同意卡尔克在评论中所说的话。选择最清晰简洁的一个。不要仅根据速度选择一种选择。用Guido van Rosom的话说:可读性计算