簡體   English   中英

如何將列表元素一分為二?

[英]How to turn one list element in two?

可以說我有一個像這樣的列表:

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 €']

使用正則表達式提取與<digits>,<digits> €模式匹配的所有價格<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))

不使用正則表達式:根據歐元符號拆分並重新格式化,在此過程中將列表弄平,並去除所有空白:

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 €']

這是另一種無需正則表達式的方式:

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 €']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM