问题描述
如果索引不存在,有没有办法从具有默认值的列表中弹出元素?我知道对于字典,python 允许 pop 函数返回一个默认值,如下所示:
d = {"stack": "overflow"}
d.pop("stack",10) # returns "overflow"
d.pop("badkey",10) # returns 10
列表有等价物吗?似乎python的默认列表弹出方法does not support default values那么实现下面代码片段中显示的功能的最pythonic方法是什么?
def pop_default(input_list,index,default_value):
try:
temp = input_list[index].copy()
del input_list[index]
except IndexError:
return default_value
解决方法
copy
和 del
是怎么回事?尝试pop
,然后抓住IndexError
:
def pop_default(input_list,index,default_value):
try:
return input_list.pop(index)
except IndexError:
return default_value
如果要在您的代码库中多次这样做,您可以使用子类(但是它可能会更令人困惑,因此最好只使用上述函数)
from collections import UserList
class MyList(UserList):
def pop(self,default_value=None):
try:
return super().pop(index)
except IndexError:
return default_value
my_list = MyList(['a'])
print(my_list.pop(0))
print(my_list.pop(0,'default'))
输出
'a'
'default'
,
我会选择一个班轮:
out = a.pop(a.index(value)) if value in a else default
其中 a
是您的列表。
如果给你一个索引,那么
out = a.pop(index) if index >=(len(a)-1) else default
编辑:
@Andrew 观察到负指数,加上通过比较修正错字后,单行版本将导致:
out = a.pop(index) if len(a)<=index<=len(a)-1 else default