开发者

Pythonic get element of array or default if it doesn't exist

We have

matches = re.findall(r'somewhat', 'somewh开发者_如何学Cere')

Can we simplify this

if len(matches) > index:
    return matches[index]
else:
    return 'default'

or

return matches[index] if len(mathes) > index else 'default'

to something similar to JS's

return matches[index] || 'default'

that we can simply use

return 'somewhere'.match(/somewhat/)[index] || 'default'


Something like this might help:

>>> reg = re.compile('-\d+-')
>>> reg.findall('a-23-b-12-c') or ['default']
['-23-', '-12-']
>>> reg.findall('a-b-c') or ['default']
['default']

Edit

Ugly one-liner

(reg.findall('a-b-c')[index:] or ['default'])[0]


I'd be tempted to use a try except block. You'd be required to consider when index was negative though. Is this an error or an acceptable input?

But the following would work:

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

This is meant to be the preferred way if you're concerned about efficiency as it avoids checking the bounds of the array twice (once when you manually do it and and second when python does its internal check as well).

edit: I've never particularly liked this way as it hides any IndexErrors thrown by sub calls and would return the default (which I doubt would be the desired behaviour and a possible source of bugs).


Not really, because running mathes[x] with an invalid index will throw an IndexError, which does not return False.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜