例如,如果通过以下步骤:
a = []
如何检查a是否为空?
例如,如果通过以下步骤:
a = []
如何检查a是否为空?
当前回答
帕特里克(被接受)的答案是正确的:如果不是:是正确的做法。哈雷·霍尔科姆(Harley Holcombe)的回答是正确的,这是在PEP8风格指南中。但没有一个答案能解释为什么遵循这个习语是一个好主意,即使你个人觉得它不够明确或让Ruby用户感到困惑。
Python代码和Python社区有很强的习惯用法。遵循这些习惯用法可以让任何有Python经验的人更容易阅读代码。当你违反这些习惯用语时,这是一个强烈的信号。
的确,如果不是:,就不能将空列表与None、数字0、空元组、空用户创建的集合类型、空用户生成的不完全集合类型、或单个元素NumPy数组用作带有假值的标量等区分开来。在这种情况下,你知道你想表达什么,所以你可以测试一下。例如,如果不是a,并且a不是None:表示“除了None以外的任何错误”,而如果len(a)!=0:表示“只有空序列和除了序列之外的任何东西在这里都是错误的”,以此类推。除了测试你想要测试的东西之外,这也向读者发出了这个测试很重要的信号。
但是,当你没有什么要明确的时候,除了:以外的任何东西都会误导读者。当它不重要的时候,你在发出同样重要的信号。(你也可能会让代码变得不那么灵活,或者更慢,或者其他什么的,但这都不那么重要。)如果你习惯性地这样误导读者,那么当你确实需要做出区分时,它会被忽略,因为你一直在代码中“嚎啕大哭”。
其他回答
我们可以使用一个简单的if else:
item_list=[]
if len(item_list) == 0:
print("list is empty")
else:
print("list is not empty")
简单的方法是检查长度是否等于零。
if len(a) == 0:
print("a is empty")
在真值测试中,空列表本身被认为是错误的(请参见python文档):
a = []
if a:
print("not empty")
达伦·托马斯的回答:
编辑:反对测试的另一点空列表为False:多态性?你不应该依赖列表是列表。它应该只是像鸭子一样呱呱叫-你怎么样让你的duckCollection呱呱叫当它没有元素时为“False”?
duckCollection应该实现__nonzero_或__len__,因此if-a:将毫无问题地工作。
要检查列表是否为空,可以使用以下两种方法。但请记住,我们应该避免显式检查序列类型的方式(这是一种不太像Python的方式):
def enquiry(list1):
return len(list1) == 0
# ––––––––––––––––––––––––––––––––
list1 = []
if enquiry(list1):
print("The list isn't empty")
else:
print("The list is Empty")
# Result: "The list is Empty".
第二种方式是一种更具Python风格的方式。这种方法是一种隐式检查方法,比前一种方法更可取。
def enquiry(list1):
return not list1
# ––––––––––––––––––––––––––––––––
list1 = []
if enquiry(list1):
print("The list is Empty")
else:
print("The list isn't empty")
# Result: "The list is Empty"
只需使用is_empty()或生成如下函数:-
def is_empty(any_structure):
if any_structure:
print('Structure is not empty.')
return True
else:
print('Structure is empty.')
return False
它可以用于任何数据结构,如列表、元组、字典等等。通过这些,您可以使用is_empty(any_structure)多次调用它。