2014-09-02 29 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