Возвращать строку в виде списка? - PullRequest
0 голосов
/ 08 ноября 2018

Например, я хочу вернуть это

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 голосов
/ 08 ноября 2018

Используйте регулярные выражения, чтобы найти нужные числа

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]]
0 голосов
/ 08 ноября 2018

Вы можете использовать понимание списка, чтобы сделать это однострочным:

>>> 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...