如何将一个列表元素一分为二?
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> €
模式匹配的所有价格并展平结果列表:
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 €']
假设我有一个这样的列表:
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> €
模式匹配的所有价格并展平结果列表:
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 €']