20

如何在不使用 not 命令的情况下确定列表是否为空?
这是我尝试过的:

if list3[0] == []:  
    print("No matches found")  
else:  
    print(list3)

我是一个初学者,如果我犯了愚蠢的错误,请原谅。

4

5 回答 5

65

按优先顺序:

# Good
if not list3:

# Okay
if len(list3) == 0:

# Ugly
if list3 == []:

# Silly
try:
    next(iter(list3))
    # list has elements
except StopIteration:
    # list is empty

如果你同时有 if 和 else 你也可以重新排序案例:

if list3:
    # list has elements
else:
    # list is empty
于 2013-04-15T17:24:53.463 回答
8

您可以通过测试列表的“真相”来确定列表是否为空:

>>> bool([])
False
>>> bool([0])     
True

虽然在第二种情况下0为 False,但该列表[0]为 True,因为它包含某些内容。(如果您想测试包含所有虚假内容的列表,请使用allany : any(e for e in li)is True 如果其中的任何项目li是真实的。)

这导致了这个成语:

if li:
    # li has something in it
else:
    # optional else -- li does not have something 

if not li:
    # react to li being empty
# optional else...

根据PEP 8,这是正确的方法:

• 对于序列(字符串、列表、元组),使用空序列为假这一事实。

Yes: if not seq:
     if seq:

No: if len(seq)
    if not len(seq)

您可以使用以下方法测试列表是否存在特定索引try

>>> try:
...    li[3]=6
... except IndexError:
...    print 'no bueno'
... 
no bueno

因此,您可能希望将代码的顺序反转为:

if list3:  
    print list3  
else:  
    print "No matches found"
于 2013-04-15T17:25:02.360 回答
1

检查它的长度。

l = []
print len(l) == 0
于 2013-04-15T17:24:41.010 回答
0

你会这样做

if len(list3) == 0:
    print("No matches found")  
于 2013-04-15T17:25:15.910 回答
0

Python 提供了一个内置的 any() 函数来检查一个可迭代对象是否为空:

>>>list=[]

>>>any(list)

False

如果可迭代对象包含“True”值,则该函数返回 True,否则返回 False。

但是,请注意,列表 [0] 也使用 any() 返回 False。

于 2020-03-23T08:45:15.277 回答