试图获得
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']
它并不重要,因为我可以将列表拆分以减少需要削减的元素数量。
答案 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个元素。循环遍历3
,4
和5
,将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']