python: извлечь float из списка строк python (AUD 31.99) - PullRequest
0 голосов
/ 13 ноября 2018

python: извлечение числа из списка строк в python (AUD 31.99).Я использовал openpyxl, чтобы прочитать из файла Excel список суммы.и я сохранил его в списке, но список в строковой форме, например:

['31.40 AUD', ' 32.99 AUD', '37.24 AUD']

Мне нужно получить число с плавающей точкой из списка строковых элементов, чтобы позже я мог сохранить его в новом списке, чтобы получитьвсего их.

Желаемый вывод:

[31.40, 32.99, 37.24]

Я уже пробовал это:

newList = re.findall("\d+\.\d+", tot[0])
print(newList)

Вывод:

[31.40]

НоКак я могу использовать это для всех элементов item?

Я новичок в python, это просто для какой-то работы, которую я делаю, я хотел увидеть общее количество, используя python вместо использования опции поиска и замены в Excel.спасибо

Ответы [ 4 ]

0 голосов
/ 13 ноября 2018

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

import re
import math

def float_from_string(str_):
    # Try to extract a floating number, if fail return nan
    r = re.search('\d+\.\d+', str_)
    return float(r.group()) if r else math.nan

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD', ' nonumberhere AUD']
totfloat = [float_from_string(i) for i in tot]

print(totfloat)

Возвращает:

[31.4, 32.99, 37.24, nan]
0 голосов
/ 13 ноября 2018

Вы можете использовать функцию map:

inList = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
output = list(map(lambda elem: float(elem.split()[0]), inList))
print(output)

Выход:

[31.4, 32.99, 37.24]
0 голосов
/ 13 ноября 2018

Если вы хотите получить список значений с помощью регулярных выражений, попробуйте

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(re.search('\d+\.\d+', fl).group(0)) for fl in tot]
print(newList)
# [31.40, 32.99, 37.24]

но использование split кажется более простым решением в этом случае

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(item.split()[0]) for item in tot] 
print(newList)
# [31.40, 32.99, 37.24]

Если вторая подстрока всегда одинакова ("AUD"), вы также можете попробовать

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(item.rstrip(' AUD')) for item in tot] 
print(newList)
# [31.40, 32.99, 37.24]
0 голосов
/ 13 ноября 2018

Можно ли вместо этого использовать разделение строк?Я думаю, что было бы намного проще

ls1 = ['32.46 AUD', '17.34 AUD']

myFloats = []
for aString in ls1:
    aFloat = float(aString.split()[0])
    myFloats.append(aFloat)
...