【问题标题】:Python: pop from empty listPython:从空列表中弹出
【发布时间】:2015-09-21 20:43:11
【问题描述】:

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

importer = exporterslist.pop(0)

如果exporterslist 没有条目,则返回error: IndexError: pop from empty list。如何绕过没有条目的 exporterslist?

我能想到的一个想法是,如果 exporterslist 不是 None 那么importer = exporterslist.pop(0) 否则获取循环中的下一个条目。 如果思路正确,那么如何用python编码呢?

【问题讨论】:

  • “获取循环中的下一个条目”是什么意思?

标签: python python-2.7


【解决方案1】:

你在正确的轨道上。

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

【讨论】:

  • 'if'后必须用'else'吗?
  • 不!你不需要else 子句,你不必使用它。
【解决方案2】:

这个..

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
>>> 

【讨论】:

  • 这是为那些 需要 有一个单行的人准备的:我个人更喜欢 if 语句,因为它更容易阅读和理解。如果您不需要轻松阅读和理解,那就去吧。
【解决方案3】:

你也可以使用 try/except

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

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

【讨论】:

  • Upvoting 因为这保留了 pop 的线程安全属性,并且是 EAFP
【解决方案4】:

使用这个:

if exporterslist:
    importer = exporterslist.pop(0)

【讨论】:

  • if exporterslist: 会做同样的工作
  • @pedjjj 谢谢你的建议。已包含它。
【解决方案5】:

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

if len(exporterslist) > 1:
    importer = exporterslist.pop()

【讨论】:

  • if len(exporterslist) > 0
猜你喜欢
  • 2017-08-15
  • 2013-06-11
  • 1970-01-01
  • 2022-12-23
  • 2014-04-04
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多