2015-05-21 38 views
-1

說我有這樣一個字符串列表:Python的 - 通過一個字符串列表循環,從而形成新的字符串

list_str = ["Blah1", "Blah2", "Blah3", "Bad", "Yada1", "Yada2", "Yada3"] 

我如何通過這個列表循環,從而當我遇到「壞」,我可以把之前的「壞」的所有字符串到一個單獨的字符串Blah後「壞」的所有字符串將在名爲Yada

本質另一個字符串,當我打印Blah我應該得到:

Blah1 
Blah2 
Blah3 

每個等分都必須由前一個換行符分隔。

+0

什麼。有。您。試過。 ?。 – tamasgal

+0

@septi:http://i.imgur.com/J5M9HeW.png – TigerhawkT3

+0

python新手,不知從何入手!任何提示? –

回答

3

您可以使用itertools.takewhile,它被設置爲完成這一點。

>>> import itertools 
>>> list(itertools.takewhile(lambda i: i != "Bad", list_str)) 
['Blah1', 'Blah2', 'Blah3'] 

要之前和之後的"Bad"

>>> iter_str = iter(list_str) 
>>> front, back = list(itertools.takewhile(lambda i: i != "Bad", iter_str)), list(iter_str) 
>>> front 
['Blah1', 'Blah2', 'Blah3'] 
>>> back 
['Yada1', 'Yada2', 'Yada3'] 
+0

+1因爲我想他從來沒有說過他需要任何東西后壞...但通過使用'iter(list_str)'你可以很容易地得到一切後,以及 –

+0

hehe我已經給了你一個+1,但你可以做'iter(lambda:next(iter_str),「Bad」),list(iter_str)'只是爲了好玩:P –

3
list_str_blah = list_str[:list_str.index("Bad")] 
list_str_yadda = list_str[list_str.index("Bad")+1:] 

可能是最簡單的方法......雖然你總是可以只需要調用一次索引,並將其保存

bad_idx = list_str.index("Bad") 
+0

做「:」和「+1:」是否表示某種範圍? –

+0

粗糙他們做...它是標準蟒蛇切片 –

2

不,我真的建議編程這種方式得到的,但是......

>>> SEP='---' 
>>> [x.split(SEP) for x in SEP.join(list_str).partition(SEP + "Bad" + SEP)][0] 
['Blah1', 'Blah2', 'Blah3'] 
+0

aweful ...但是同時很棒 –

+1

當你開始試圖認真學習Haskell時會發生什麼...) – chepner

+0

[如果IF?](https://i.imgflip.com/ltjid.jpg) –