![](/img/trans.png)
[英]Does Python[3.6+] built-in Dictionary have any function similar to OrderedDict's move_to_end()
[英]Does python have a built-in get() for list similar to dictionaries?
我想从列表中选择一个项目,如果找不到则返回默认值(而不是通常的索引异常)。 与字典上的get(key,default)非常相似。 仔细阅读文档后,感觉像我仍然忽略了提供此功能的普通内置python解决方案。
这是我能想到的最快的方法:
def pluck(list_items, index, default=None):
return dict(zip(range(len(list_items)), list_items)).get(index, default)
s = [1, 2,]
pluck(s, 3, None)
谢谢!
根据您希望尝试在数组范围之外进行访问的频率而定,您应该捕获异常(如果预期失败很少),或者测试索引是否有效,否则返回默认值。
如果预计失败很少发生,那么这可能是最快的解决方案:
def pluck(items, index, defval):
try:
return items[index]
except IndexError:
return defval
如果期望它们频繁出现,则最好检查索引是否有效:
def pluck(items, index, defval):
return items[index] if -len(items) <= index < len(items) else defval
注意,如果abs(index) <= len(items)
,则使用负索引是有效的。 items[-1]
等效于items[len(items)-1]
。
为了使它真正快速和简单,如果仅使用正索引:
seq, i = [1, 2, 3], 2
plucked = seq[i] if seq[i:] else None
除此以外:
def pluck(seq, index, default=None):
try:
return seq[index]
except IndexError:
return default
如果例外是常态:
def pluck(seq, index, default=None):
return seq[index] if seq[index:] and seq[-index-1:] else default
两者都适用于负索引。
像这样的东西,它也适用于负索引。
def list_get(lis, index, default = None):
index = index if index >=0 else len(lis) + index
return lis[index] if 0 <= index < len(lis) else default
>>> lis = range(10)
>>> list_get(lis, 8, 'foo')
8
>>> list_get(lis, 11, 'foo')
'foo'
>>> list_get(lis, -11, 'foo')
'foo'
>>> list_get(lis, -9, 'foo')
1
>>> list_get(lis, -5, 'foo')
5
看来您的采摘功能可以写成
def pluck(list_items, index, default=None):
if index>length(list_items)-1
return default
else
return list_items[index]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.