python - 从具有默认值的 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
解决方案
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'
推荐阅读
- python - 使用pandas python过滤并合并多个单元格为一个单元格Excel
- javascript - 使 Vuetify 的 v-select 更小,以便它可以很好地适合段落
- r - 有没有办法在 R 的 for 循环中进行滚动平均计算?
- tabulator - 制表器 - 获取包含顺序和大小的列
- c++ - Arduino上未知大小的数组
- casl - 获得正确的允许条件字段
- python - 如何“包装”行和列索引?
- php - 在 laravel 8 中出现一个名为“Class 'Database\Seeders\App\Models\Product' not found'' 的错误
- c# - C# winforms - Form.ActiveForm = null 的场景是什么?
- java - Android/Java:如何从另一个活动访问我的 BottomNavigationView 特定变量?