字符串拆分,最小尺寸

时间:2014-06-06 23:44:26

标签: python

我正在编写一个python脚本,它将接受以点分隔的版本号。它会将此字符串拆分为单个组件(使用句点(.)作为分隔符)。我的脚本最多支持4个组件(例如1.2.3.4)。但是,用户可以指定 less more 组件而不是4,我的脚本需要能够处理它。

如果小于4,我从string.split()返回的列表需要调整为4并将缺少的组件初始化为字符串"0"。如果大于4,则只截断第4个组件之后的元素。

截断很容易,我只是拼接列表。但是,我不知道如何执行最多4个元素的调整。有没有这样做的pythonic方法,还是我需要手写一堆逻辑来做呢?

我正在使用Python 3.2。

4 个答案:

答案 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))

会做你需要的填充。

这是有效的,因为对于任何列表ll * x都会创建一个新列表,其元素l重复x次,因此[0]*4只是列表[0,0,0,0]len(a)是列表的当前长度,因此4-len(a)是所需额外元素的数量。