我正在编写一个python脚本,它将接受以点分隔的版本号。它会将此字符串拆分为单个组件(使用句点(.
)作为分隔符)。我的脚本最多支持4个组件(例如1.2.3.4
)。但是,用户可以指定 less 或 more 组件而不是4,我的脚本需要能够处理它。
如果小于4,我从string.split()
返回的列表需要调整为4并将缺少的组件初始化为字符串"0"
。如果大于4,则只截断第4个组件之后的元素。
截断很容易,我只是拼接列表。但是,我不知道如何执行最多4个元素的调整。有没有这样做的pythonic方法,还是我需要手写一堆逻辑来做呢?
我正在使用Python 3.2。
答案 0 :(得分:2)
您通常可以检查列表的长度,然后将缺少的列表添加回开头:
def pad_list(input_string, pad_length, pad_char='0'):
base_version = input_string.split('.')[:pad_length]
missing_entries = [pad_char] * pad_length - len(base_version)
return base_version + missing_entries
这里唯一的补充是实际检查您获得的部分列表的长度,然后创建另一个与缺失部分长度相同的列表。
或者,您可以提前添加0,以防它太短:
(a + '.' + '.'.join(['0'] * 4)).split('.')[:4]
这里第二行背后的想法是抢先向你的版本字符串添加零,这有效地消除了你的填充问题。
首先,我们将'.' + '.'.join(['0']*4)
添加到字符串a
的末尾,这会将.0.0.0.0
添加到结尾,这意味着无论什么是什么,有效填充都在那里在其余的字符串中。
在填充之后,您可以像往常一样进行切片:.split('.')[:4]
答案 1 :(得分:1)
这就是诀窍
def GetVersionList( version_string ):
vlist = version_string.split('.')[:4]
vlist.extend('0' * (4 - len(vlist) ) )
return vlist
或更通用的版本
def FixedLengthListFromString( input, length, delimiter='.', padChar='0' ):
vlist = input.split(delimiter)[:length]
vlist.extend(padChar * (length - len(vlist) ) )
return vlist
答案 2 :(得分:0)
>>> (['0'] * 4 + "4.5".split('.'))[-4:]
['0', '0', '4', '5']
>>> (['0'] * 4 + "4.5".split('.'))[-4:]
['0', '0', '4', '5']
>>> (['0'] * 4 + "2.4.5".split('.'))[-4:]
['0', '2', '4', '5']
>>> (['0'] * 4 + "1.2.4.5".split('.'))[-4:]
['1', '2', '4', '5']
答案 3 :(得分:-1)
如果您的列表为a
,并且您想要将其填充为4个元素
a = a + [0]*(4-len(a))
会做你需要的填充。
这是有效的,因为对于任何列表l
,l * x
都会创建一个新列表,其元素l
重复x
次,因此[0]*4
只是列表[0,0,0,0]
。 len(a)
是列表的当前长度,因此4-len(a)
是所需额外元素的数量。