返回字符串作为列表?

时间:2018-11-08 19:07:46

标签: python string list

例如,我要返回此

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] = ????

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]