两种不同的方法来反转整数的数字首选的方法?

2024-04-26 14:41:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在磨一些LeetCode的东西,其中一个问题是要反转整数的数字(例如123变成321)。你知道吗

我想到了两种方法。第一个是纯“数字”,使用10的幂和模运算:

def reverse_digits1(num):
    reversed_num = 0

    while num > 0:
        reversed_num *= 10
        reversed_num += num % 10
        num = num // 10

    return reversed_num

第二种方法是使用内置的str()int()方法。你知道吗

def reverse_digits2(num):
    num = str(num)

    return int(num[::-1])

实际上是将其转换为字符串,将其反转,然后将反转后的字符串作为整数返回。你知道吗

在这两种方法之间,哪种方法“更好”呢?我猜这是第一个,它不涉及到将数字变异成字符串,反之亦然,而且没有潜在的信息丢失?会不会有信息丢失?输入都是整数,所以不需要担心浮点数,对吧?你知道吗

一般来说,通过str()int()处理数字是个好主意,还是应该坚持使用“数值方法”?你知道吗


Tags: 方法字符串信息returndef数字整数num
1条回答
网友
1楼 · 发布于 2024-04-26 14:41:32

我添加了负片,以防你可能需要它们,但是没有它们,整体性能也不会有很大的变化。你知道吗

def reverse_digits1(num):
    if num < 0:
        neg = True
    else:
        neg = False

    if neg:
        num *= -1

    reversed_num = 0

    while num > 0:
        reversed_num *= 10
        reversed_num += num % 10
        num = num // 10

    if neg:
        reversed_num *= -1

    return reversed_num


def reverse_digits2(num):
    num = str(num)[::-1]
    if num.endswith('-'):
        num = '-' + num[:-1]

    return int(num)


from timeit import timeit as _t

timeit = lambda x: print(_t(x, globals=globals()))

timeit("reverse_digits1(123456789)")
timeit("reverse_digits1(-123456789)")
timeit("reverse_digits2(123456789)")
timeit("reverse_digits2(-123456789)")

这导致

5.207313711074936
6.272431325012982
2.453335871448827
3.285427497418125

所以除了可读性更好之外,它实际上也更快。你知道吗

至于信息丢失,我无法想象用正则整数, 即使它是浮点数或其他类型的数字,字符串也会更可靠,因为作为一个非常基本的例子,字符串中的0.1+02==0.3000000000000001,但是您可以以一定的精度操纵它们。你知道吗

*请记住,代码是为供人类阅读而编写的。你知道吗

相关问题 更多 >