Python:从空列表中弹出

问题描述 投票:0回答:5

我在代码中的循环中使用下面的行

importer = exporterslist.pop(0)

如果

exporterslist
没有条目,则返回
error: IndexError: pop from empty list
。如何绕过其中没有条目的出口商列表?

我能想到的一个想法是,如果 Exporterslist 不是 None 那么

importer = exporterslist.pop(0)
否则获取循环中的下一个条目。 如果这个想法是正确的,如何用Python编写它?

python python-2.7
5个回答
30
投票

您走在正确的道路上。

if exporterslist: #if empty_list will evaluate as false.
    importer = exporterslist.pop(0)
else:
    #Get next entry? Do something else?

16
投票

这个..

exporterslist.pop(0) if exporterslist else False

..与 @nightshadequeen 接受的答案有点相同,只是更短:

>>> exporterslist = []   
>>> exporterslist.pop(0) if exporterslist else False   
False

或者也许你可以用它来得到根本没有回报:

exporterslist.pop(0) if exporterslist else None

>>> exporterslist = [] 
>>> exporterslist.pop(0) if exporterslist else None
>>> 

更新:
一个更时髦的解决方案,仅适合那些有旅行癖或只是为了好玩的人:

>>> exporterslist = []
>>> importer = exporterslist and exporterslist.pop(0) or False
>>> importer 
False 

>>> exporterslist = ['a'] 
>>> importer = exporterslist and exporterslist.pop(0) or False
>>> importer 
'a'

10
投票

您还可以使用 try/ except

try:
    importer = exporterslist.pop(0)
except IndexError as e:
    print(e)

如果你总是从前面弹出,你可能会发现 deque 是一个更好的选择,因为 deque.popleft() 是

0(1)


4
投票

使用这个:

if exporterslist:
    importer = exporterslist.pop(0)

-3
投票

您还可以通过确定列表的长度是否为 1 或更大,仅当列表中有项目时才使用 .pop() :

if len(exporterslist) >= 1: #if the length of the list is equal or higher than one
    importer = exporterslist.pop()
© www.soinside.com 2019 - 2024. All rights reserved.