如何解决Pythonic获取数组元素或默认值如果不存在
| 我们有matches = re.findall(r\'somewhat\',\'somewhere\')
我们可以简化一下吗
if len(matches) > index:
return matches[index]
else:
return \'default\'
要么
return matches[index] if len(mathes) > index else \'default\'
类似于JS \
return matches[index] || \'default\'
我们可以简单地使用
return \'somewhere\'.match(/somewhat/)[index] || \'default\'
解决方法
这样的事情可能会有所帮助:
>>> reg = re.compile(\'-\\d+-\')
>>> reg.findall(\'a-23-b-12-c\') or [\'default\']
[\'-23-\',\'-12-\']
>>> reg.findall(\'a-b-c\') or [\'default\']
[\'default\']
编辑
丑陋的单线
(reg.findall(\'a-b-c\')[index:] or [\'default\'])[0]
, 我很想尝试使用try除块。不过,您需要考虑何时索引为负。这是错误还是可接受的输入?
但是以下方法会起作用:
try:
return re.findall(r\'somewhat\',\'somewhere\')[index]
except IndexError:
return \'default\'
如果您担心效率,则这是首选方法,因为它避免了两次检查数组的边界(一次手动检查一次,而python进行内部检查则第二次)。
编辑:我从未特别喜欢这种方式,因为它隐藏了子调用引发的任何IndexErrors并会返回默认值(我怀疑这是否是所需的行为以及可能的错误源)。
, 并非如此,因为以无效索引运行mathes[x]
会抛出IndexError
,而不会返回False
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。