Как извлечь Double из строки в Python? - PullRequest
1 голос
/ 01 марта 2020

На данный момент у меня есть это, но это работает только для целых чисел (целых чисел), а не удваивается:

S = "Weight is 3.5 KG"
weight = [int(i) for i in S.split() if i.isdigit()] 

print(weight)

результат: []

Ответы [ 3 ]

0 голосов
/ 01 марта 2020

Вы можете использовать re

import re
print(re.findall('\d+\.\d+',S)
#['3.5']

Используя try-except

for i in S.split():
    try:
        new.append(float(i))
    except Exception:
        pass

print(new)
#['3.5']
0 голосов
/ 01 марта 2020

Следующий код выполнит работу для вашего примера:

if __name__ == "__main__":

    S = "Weight is 3.5 KG"

    # search for the dot (.)
    t = S.find('.')

    # check if the dot (.) exist in the string
    # make sure the dot (.) is not the last character
    # of the string
    if t > 0 and t+1 != len(S):
        # check the character before and after 
        # the dot (.)
        t_before = S[t-1]
        t_after = S[t+1]

        # check if the charactef before and after the 
        # dot (.) is a digit
        if t_before.isdigit() and t_after.isdigit():
            # split the string
            S_split = S.split()

            for x in S_split:
                if '.' in x:
                    print(float(x))

Вывод:

3.5
0 голосов
/ 01 марта 2020

Вы можете использовать регулярное выражение для извлечения числа с плавающей запятой:

import re

S = "Weight is 3.5 KG"
pattern = re.compile(r'\-?\d+\.\d+')

weights = list(map(float, re.findall(pattern, S)))
print(weights)

re.findall() вернет вам список чисел, найденных в тексте. Функция map преобразует результаты списка в число с плавающей запятой. Поскольку он возвращает генератор, вам необходимо преобразовать его в list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...