从 split() 获取最小数量的元素

fra*_*ans 5 python string split

想象一个包含(逗号)分隔元素的字符串,例如版本字符串

version_str = "3,1,4,159"
Run Code Online (Sandbox Code Playgroud)

其中可能或多或少包含一个或多个元素:

version_str = "3,1,4"
Run Code Online (Sandbox Code Playgroud)

或者

version_str = "3,1,4,159,appendix"
Run Code Online (Sandbox Code Playgroud)

我想像这样分开这些元素:

major, minor, patch, revision, appendix = version_str.split(',')
Run Code Online (Sandbox Code Playgroud)

然后我当然会得到一个ValueError,因为提取的元素数量并不总是匹配。

有没有办法得到extend结果split(),例如这样:

version_str.split(',', min_elements=5)
Run Code Online (Sandbox Code Playgroud)

或者

version_str.split(',').extend(5, default='')
Run Code Online (Sandbox Code Playgroud)

例子:

>>> '3,1,4'.split(',', min_elements=5)
['3', '1', '4', '', '']

>>> '3,1,4,159,dev'.split(',', min_elements=5)
['3', '1', '4', '159', 'dev']
Run Code Online (Sandbox Code Playgroud)

当然,我可以随后手动添加元素或有条件地读取元素,但我对 pythonic one-liner 感兴趣。

Mik*_*ler 5

zip_longest在一行中使用:

from itertools import zip_longest
major, minor, patch, revision, appendix = [x + y for x, y in zip_longest(
                                           version_str.split(','),  [''] * 5, fillvalue='')]
Run Code Online (Sandbox Code Playgroud)

或者:

split = version_str.split(',')
major, minor, patch, revision, appendix = split + [''] * (5 - len(split))
Run Code Online (Sandbox Code Playgroud)