Вы можете использовать понимание списка, чтобы сделать это однострочным:
>>> 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
s, что даст нам:
>>> values = [float(y.split('=')[-1]) for y in x.split(';') if y]
>>> values
[12.2, 18.0, 18.0, 12.2]