首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用默认值从Python列表中弹出

使用默认值从Python列表中弹出
EN

Stack Overflow用户
提问于 2021-04-09 04:28:43
回答 2查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
d = {"stack": "overflow"}
d.pop("stack", 10) # returns "overflow"
d.pop("badkey", 10) # returns 10

有没有列表的等价物?看起来python的默认列表弹出方法是does not support default values,那么实现下面代码片段中所示功能的最python方式是什么呢?

代码语言:javascript
复制
def pop_default(input_list, index, default_value):
    try:
        temp = input_list[index].copy()
        del input_list[index]
    except IndexError:
        return default_value
EN

回答 2

Stack Overflow用户

发布于 2021-04-09 04:31:19

copydel是怎么回事?只需尝试pop,并捕获IndexError

代码语言:javascript
复制
def pop_default(input_list, index, default_value):
    try:
        return input_list.pop(index)
    except IndexError:
        return default_value

如果你打算在你的代码库中多次这样做,你可以使用子类(但是它可能会更令人困惑,所以使用上面的函数可能更好)

代码语言:javascript
复制
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'))

输出

代码语言:javascript
复制
'a'
'default'
票数 2
EN

Stack Overflow用户

发布于 2021-04-09 04:34:43

我会用一个线条:

代码语言:javascript
复制
out = a.pop(a.index(value)) if value in a else default

其中a是您的列表。

如果给你一个索引,那么

代码语言:javascript
复制
out = a.pop(index) if index >=(len(a)-1) else default

编辑:

在@Andrew的观察来解释负指数之后,加上用比较来修正拼写错误,一行版本将得到如下结果:

代码语言:javascript
复制
out = a.pop(index) if len(a)<=index<=len(a)-1 else default
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67011427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档