不使用`not`命令检查列表是否为空

use*_*288 20 python list is-empty

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

if list3[0] == []:  
    print "No matches found"  
else:  
    print list3
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ica 64

按优先顺序排列:

# 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
Run Code Online (Sandbox Code Playgroud)

如果你同时拥有if和else,你也可以重新订购这些案例:

if list3:
    # list has elements
else:
    # list is empty
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,在引擎盖下,"1"和"2"在大多数情况下都是在做同样的事情. (2认同)

daw*_*awg 8

你可以通过测试它的"真相"来找出列表是否为空:

>>> bool([])
False
>>> bool([0])     
True
Run Code Online (Sandbox Code Playgroud)

虽然在第二种情况下0是False,但列表[0]是True,因为它包含一些东西.(如果你想测试一个包含所有虚假事物的列表,请使用全部任何:any(e for e in li)如果任何项目是真实的,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...
Run Code Online (Sandbox Code Playgroud)

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

•对于序列,(字符串,列表,元组),请使用空序列为假的事实.

Yes: if not seq:
     if seq:

No: if len(seq)
    if not len(seq)
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令测试列表是否存在特定索引try:

>>> try:
...    li[3]=6
... except IndexError:
...    print 'no bueno'
... 
no bueno
Run Code Online (Sandbox Code Playgroud)

因此,您可能希望将代码的顺序颠倒过来:

if list3:  
    print list3  
else:  
    print "No matches found"
Run Code Online (Sandbox Code Playgroud)