Pythonic获取数组元素或默认值(如果不存在)

时间:2011-06-06 21:12:26

标签: python list element default

我们有

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'

3 个答案:

答案 0 :(得分:4)

这样的事情可能有所帮助:

>>> 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]

答案 1 :(得分:1)

我很想尝试使用try除了块。您需要考虑索引何时为负数。这是错误还是可接受的输入?

但以下情况可行:

try:
    return re.findall(r'somewhat', 'somewhere')[index]
except IndexError:
    return 'default'

如果您关注效率,这是首选的方法,因为它避免了两次检查数组的边界(一次是手动执行,第二次是python也进行内部检查)。

编辑:我从来没有特别喜欢这种方式,因为它隐藏了子调用抛出的任何IndexErrors并返回默认值(我怀疑这是所需的行为和可能的错误来源)。

答案 2 :(得分:0)

不是真的,因为使用无效索引运行mathes[x]会抛出IndexError,但不会返回False

相关问题