2017-04-23 72 views
0

可以說,我有一個這樣的名單:如何將一個列表元素變成兩個?

bla = ['3,00 € 3,50 €\r\n', '3,00 €\r\n', '6,50 €\t5,50 €\r\n'] 

每次我有一個項目兩個價格我想在兩個項目把這個項目。 所以它看起來像這樣:

['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €'] 
+1

您確定要保留\ r \ n,選項卡字符嗎? –

+0

不,我不想要他們:) – 1337

+0

我編輯了你的問題,然後,:) –

回答

2

沒有正則表達式:拆分根據歐元符號和格式化,扁平化的過程中列表,並剝離所有空格:

bla = ['3,00 € 3,50 €\r\n', '3,00 €\r\n', '6,50 €\t5,50 €\r\n'] 

result = ["{} {}".format(x.strip(),"€") for item in bla for x in item.split("€") if x.strip()] 

print(result) 

結果:

['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €'] 
3

提取的<digits>,<digits> €模式與正則表達式匹配所有的價格和扁平結果列表:

import re 
l = [item for s in [re.findall("[0-9]+,[0-9]+\s?€", x) for x in bla] for item in s] 

編輯:

更短,加入將您的列表轉換爲單個字符串並提取與所述模式匹配的所有字符串:

l = re.findall("[0-9]+,[0-9]+\s?€", " ".join(bla)) 
+0

這可以簡化爲'[m for x in bla for m in re.findall(「[0-9] +,[0- 9] + \ s?€「,x)]' –

0

這裏的(另一個)的方式來做沒有正則表達式:

from itertools import chain 

bla = ['3,00 € 3,50 €\v\n', '3,00 €\v\n', '6,50 €\t5,50 €\v\n'] 

result = [r for r in chain.from_iterable(((v+' €' for v in (y.strip() 
                for y in s.split('€') if y.strip())) 
                 for s in bla))] 
print(result) 

輸出:

['3,00 €', '3,50 €', '3,00 €', '6,50 €', '5,50 €'] 
相關問題