Python在特定列表中拆分特定字符串的方法

时间:2014-09-02 13:28:51

标签: python

试图获得

x = 'AAA-BBB-CCC-DDD-EEE'

y = ['AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']

有一个很好的方法吗?

我不是在寻找一个非常一般的规则,我只想知道如何形成具有y的上述x。它基本上是一个带分隔符的字母串,我希望逐步获得所有项目的列表,如示例中所示。 (如果你能得到['AAA', 'AAA-BBB', 'AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']它并不重要,因为我可以将列表拆分以减少需要削减的元素数量。

2 个答案:

答案 0 :(得分:3)

我将分两步进行。首先,按分隔符分割:

z = x.split('-')

然后,将每个项目加入/到一定长度:

['-'.join(z[:i+1]) for i in range(2,len(z))]

如果您不想硬编码2,并从中间开始,请使用len(z)/2或其他标准:

>>> ['-'.join(z[:i+1]) for i in range(2,len(z))]
['AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']
>>> ['-'.join(z[:i+1]) for i in range(len(z)/2,len(z))]
['AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']

答案 1 :(得分:3)

拆分,然后再次加入,选择越来越大的切片:

elems = x.split('-')
['-'.join(elems[:i]) for i in xrange(3, len(elems) + 1)]

这假设您希望第一部分始终具有3个元素。循环遍历345,将elems切片到那么多元素,并在分隔符上再次将它们连接在一起。

演示:

>>> x = 'AAA-BBB-CCC-DDD-EEE'
>>> elems = x.split('-')
>>> ['-'.join(elems[:i]) for i in xrange(3, len(elems) + 1)]
['AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']