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 感兴趣。
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)