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)
你可以通过测试它的"真相"来找出列表是否为空:
>>> 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,这是正确的方法:
•对于序列,(字符串,列表,元组),请使用空序列为假的事实.
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
因此,您可能希望将代码的顺序颠倒过来:
if list3:
print list3
else:
print "No matches found"
Run Code Online (Sandbox Code Playgroud)