例如,我要返回此
lst = ['apple', 'banana', 'Total=60.4 (1)=12.2;(2)=18;(3)=18;(4)=12.2;']
为
lst = ['apple', 'banana', [12.2, 18.0, 18.0, 12.2]]
我不知道该怎么做:
for i in lst:
i[2] = ????
答案 0 :(得分:2)
使用正则表达式查找所需的数字
import re
a='Total=60.4 (1)=12.2;(2)=18;(3)=18;(4)=12.2;'
map(float,(re.findall('(?=\=(\d{1,}\.\d{1,}|\d{1,}))',a.split(" ")[1])))
输出
[12.2, 18.0, 18.0, 12.2]
对于给定的示例
import re
lst = ['apple', 'banana', 'Total=60.4 (1)=12.2;(2)=18;(3)=18;(4)=12.2;']
lst[2]=map(float,(re.findall('(?=\=(\d{1,}\.\d{1,}|\d{1,}))',lst[2].split()[1])))
print(lst)
输出
['apple', 'banana', [12.2, 18.0, 18.0, 12.2]]
答案 1 :(得分:1)
您可以使用列表理解将其变成单线:
>>> x = 'Total=60.4 (1)=12.2;(2)=18;(3)=18;(4)=12.2;'
>>> values = [float(y.split('=')[-1]) for y in x.split(';') if y]
这将在x
上拆分;
,从而导致
>>> x.split(';')
['Total=60.4 (1)=12.2', '(2)=18', '(3)=18', '(4)=12.2', '']
然后,对于x
的每个元素(我们称为y
,我们再次在等号(=
)上进行分割,得到
>>> [y.split('=') for y in x.split(';')]
[['Total', '60.4 (1)', '12.2'],
['(2)', '18'],
['(3)', '18'],
['(4)', '12.2'],
['']]
理解的if y
部分将排除所有空字符串(如上面列表中的最后一个元素),而[-1]
将从y
的每个值中获取最后一个元素。在这种情况下,这些是我们想要的值,但它们都是字符串。因此,我们要做的最后一件事就是将它们转换为float
,从而得到:
>>> values = [float(y.split('=')[-1]) for y in x.split(';') if y]
>>> values
[12.2, 18.0, 18.0, 12.2]