Возникли проблемы при преобразовании списка строк в числа - PullRequest
0 голосов
/ 13 марта 2020

Итак, я получил список здесь:

list1 = ["yo dog", "2", "it's ya boi", "jake", "69.420"]

И я хочу, чтобы его вывод был таким, чтобы все числа в моем списке теперь были «плавающими», но все еще имели строковую форму:

["yo dog", "2.0", "it's ya boi", "jake", "69.420"]

Это то, что я пробовал:

list1 = [float(x) for x in list1 if is_number(x)]

list1 = [str(x) for x in list1]

По сути, это оставляет меня с:

["2.0", "69.420"] и удаляет все остальное, кроме числа. Это очевидно, потому что я делаю мой старый список равным только строкам, в которых есть числа.

(is_number (), кстати, моя функция, чтобы проверить, содержит ли строка число)

Так что, очевидно, я мог бы сделать для l oop и снова добавить вещи вместе, но мне было интересно, есть ли лучший способ сделать это.

У меня есть отрицательные числа !!!

Ответы [ 3 ]

3 голосов
/ 13 марта 2020

вы можете использовать регулярное выражение:

import re 

list1 = ["yo dog", "2", "it's ya boi", "jake", "69.420"]

[str(float(e)) if re.match(r'^-?\d+(?:\.\d+)?$', e) else e  for e in list1 ]

вывод:

['yo dog', '2.0', "it's ya boi", 'jake', '69.42']
1 голос
/ 13 марта 2020
list1 = ["yo dog", "2", "it's ya boi", "jake", "69.420"]

float_list = []

for string in list1:
    try:
        float_list.append(str(float(string)))
    except ValueError:
        #float_list.append(string) # if you want to keep string
        pass # if you don't want the string

print(float_list)
0 голосов
/ 13 марта 2020

Вы можете использовать оператор try / исключением, чтобы попытаться выполнить преобразование и просто вернуть исходные строки в случае неудачи:

def floater(s):
    try:    return str(float(s))
    except: return s

list1 = ["yo dog", "-2", "it's ya boi", "jake", "69.420"]

result = list(map(floater,list1))

print(result)
['yo dog', '-2.0', "it's ya boi", 'jake', '69.42']
...