首页 > 解决方案 > 从具有默认值的 Python 列表中弹出

问题描述

如果索引不存在,有没有办法从具有默认值的列表中弹出一个元素?我知道对于字典,python 允许 pop 函数返回一个默认值,如下所示:

d = {"stack": "overflow"}
d.pop("stack", 10) # returns "overflow"
d.pop("badkey", 10) # returns 10

列表是否有等价物?似乎python的默认列表弹出方法不支持默认值,那么实现下面代码片段中显示的功能的最pythonic方法是什么?

def pop_default(input_list, index, default_value):
    try:
        temp = input_list[index].copy()
        del input_list[index]
    except IndexError:
        return default_value

标签: pythonlistidioms

解决方案


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, index, 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'

推荐阅读