Преобразовать целое число в число с плавающей точкой - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь написать функцию, которая преобразует целые числа в числа с плавающей точкой и оставляет логические значения и строки такими, какие они есть.

Я определил следующую функцию:

def if_int_to_float(value):

    if isinstance(value, bool):

        return value

    elif isinstance(value, int):

        return float(value)

    else:

        return value

При широком использовании я обнаружил, что эта функция немного медленная.Любая идея улучшить его производительность / сделать его более питоническим?

Ответы [ 5 ]

3 голосов
/ 08 мая 2019

Вы можете удалить одну проверку и написать в одной строке, чтобы получить небольшое улучшение скорости при прохождении чисел с плавающей запятой или строк. Случай bool уже очень быстрый.

Isinstance () доставляет вам некоторые неприятности, поскольку bool также совпадает с int, следовательно, ваш первый оператор if, так что вы можете использовать вместо него type ()

def if_int_to_float(value):
    return value * 1.0 if type(value) == int else value
2 голосов
/ 08 мая 2019

попробуйте это:

def if_int_to_float(value):

    if type(value) == int:

        return float(value)

    else:

        return value
1 голос
/ 08 мая 2019

когда данные в списке, используйте lambda

data=[1,3,'j','oo']
sol = list(map(lambda x: float(x) if type(x)=='int' else x, data))
print(sol)

вывод

[1.0, 3.0, 'j', 'oo']

или используйте функцию для проверки индивидуального значения

def fun_int_to_float(value):
    if type(value)=='int':
        return float(value)
    return value
1 голос
/ 08 мая 2019

Может быть, вы можете попробовать type() функцию и получить результат.Или вы можете использовать обработку исключений для решения этого типа проблемы.Но в этом случае, как указано в комментариях, в случае значений bool он будет преобразован True в 1.0 и False в 0.0.

#using type() function
def if_int_to_float(value):
    if type(value) == int:
        return float(value)
    else:
        return value
1 голос
/ 08 мая 2019

Вы можете объединить ваши условия if. Это поможет, поскольку мы закорачиваем условия if на основе входных данных, так что это может сделать ваш код быстрее!

def if_int_to_float(value):

    #If not boolean and int or float, convert to float
    if not isinstance(value, bool) and isinstance(value, int) or isinstance(value,float):
        return float(value)

    #Else return value
    else:
        return value

print(if_int_to_float('a'))
print(if_int_to_float(1))
print(if_int_to_float(1.0))
print(if_int_to_float(True))

Выход будет

a
1.0
1.0
True
...