从具有默认值的 Python 列表中弹出

问题描述

如果索引不存在,有没有办法从具有认值的列表中弹出元素?我知道对于字典,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

解决方法

copydel 是怎么回事?尝试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