2014-09-02 109 views
-3

试图让Python的方式在特定的列表拆分特定字符串

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

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

是有一个很好的办法做到这一点?

我不是在寻找一个非常普遍的规则,我只是想知道你将如何去形成上述yx。它基本上是一串带有分隔符的字母,我希望像示例中所示的那样递增地获取所有项目的列表。 (如果你可以得到['AAA', 'AAA-BBB', 'AAA-BBB-CCC', 'AAA-BBB-CCC-DDD', 'AAA-BBB-CCC-DDD-EEE']它并不重要,因为我可以将这个列表拆分成多少个元素来切割)

+1

以及通过什么规则不'x'成为'y',什么是他们之间的关系?你有没有尝试过自己呢? – 2014-09-02 13:29:38

+0

是的,但这是一个丑陋的解决方案,我很尴尬地发布它 – confused00 2014-09-02 13:30:24

+0

但它至少会给我们提供一个线索,你如何认为'y'应该由'x'组成。目前我们所能做的只是猜测。 'x ='AAA-BBB-CCC-DDD-EEE-FFF-GGG-HHH'会发生什么?或'x ='AAA'?这里有什么变数,转换规则,如果某些事情与规则不匹配,会发生什么? – 2014-09-02 13:32:00

回答

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'] 
+0

不错,这就是我一直在寻找的东西。欢呼 – confused00 2014-09-02 13:47:34

3

拆分,然后再加入,采摘越来越大切片:

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

这里假设你希望你的第一部分总是有3个元素。循环经过3,45,将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'] 
+0

我刚刚接受了第一个答复,回答了这个问题,但我感谢你的帮助,谢谢 – confused00 2014-09-02 13:48:34