例如,如果通过以下步骤:
a = []
如何检查a是否为空?
例如,如果通过以下步骤:
a = []
如何检查a是否为空?
当前回答
帕特里克(被接受)的答案是正确的:如果不是:是正确的做法。哈雷·霍尔科姆(Harley Holcombe)的回答是正确的,这是在PEP8风格指南中。但没有一个答案能解释为什么遵循这个习语是一个好主意,即使你个人觉得它不够明确或让Ruby用户感到困惑。
Python代码和Python社区有很强的习惯用法。遵循这些习惯用法可以让任何有Python经验的人更容易阅读代码。当你违反这些习惯用语时,这是一个强烈的信号。
的确,如果不是:,就不能将空列表与None、数字0、空元组、空用户创建的集合类型、空用户生成的不完全集合类型、或单个元素NumPy数组用作带有假值的标量等区分开来。在这种情况下,你知道你想表达什么,所以你可以测试一下。例如,如果不是a,并且a不是None:表示“除了None以外的任何错误”,而如果len(a)!=0:表示“只有空序列和除了序列之外的任何东西在这里都是错误的”,以此类推。除了测试你想要测试的东西之外,这也向读者发出了这个测试很重要的信号。
但是,当你没有什么要明确的时候,除了:以外的任何东西都会误导读者。当它不重要的时候,你在发出同样重要的信号。(你也可能会让代码变得不那么灵活,或者更慢,或者其他什么的,但这都不那么重要。)如果你习惯性地这样误导读者,那么当你确实需要做出区分时,它会被忽略,因为你一直在代码中“嚎啕大哭”。
其他回答
Pythonic的做法来自PEP8风格指南。
对于序列(字符串、列表、元组),请使用空序列为false的事实:#正确:如果不是seq:如果seq:#错误:如果len(seq):如果不是len(seq):
if not a:
print("List is empty")
使用空列表的隐含布尔性是相当Python的。
我更喜欢以下内容:
if a == []:
print "The list is empty."
为什么要检查?
似乎没有人回答过你首先需要测试列表的问题。因为您没有提供额外的上下文,我可以想象,您可能不需要首先执行此检查,但不熟悉Python中的列表处理。
我认为,最Python的方法是根本不检查,而只是处理列表。这样,无论是空的还是满的,它都会做正确的事情。
a = []
for item in a:
# <Do something with item>
# <The rest of code>
这有利于处理的任何内容,同时不需要对空性进行特定检查。如果a为空,则依赖块将不执行,解释器将进入下一行。
如果确实需要检查数组是否为空:
a = []
if not a:
# <React to empty list>
# <The rest of code>
足够了。
空列表的真值为False,而非空列表的值为True。