【问题标题】:Best way to store the bigger out of 2 numbers存储2个数字中较大者的最佳方法
【发布时间】:2020-05-05 17:04:53
【问题描述】:

我正在尝试使我的 python 程序尽可能优化,而这部分我不确定。我需要存储迄今为止获得的最大值,并且我有 2 个候选代码可以这样做。哪一个是最优化时间的?或者有更快的方法吗?

代码 1:

if value > biggest_value:
    biggest_value = value

代码 2:

biggest_value = max(biggest_value, value)

上下文:

def check_palindrome(num):
    num = str(num)
    if len(num) < 1:
        return True
    else:
        if num[0] == num[-1]:
            return check_palindrome(num[1:-1])
        else:
            return False


def main():
    biggest_product = 0
    for a in range(100, 1000):
        for b in range(100, 1000):
            product = a * b
            if check_palindrome(product):
                # store the biggest_product here
    return biggest_product

main()

【问题讨论】:

  • 您可以简单地衡量一下哪个更快,然后您就会知道。
  • 尽可能优化地执行此操作可能意味着根本不执行此操作(例如,对值进行预排序)、批量执行(例如通过 numpy)或使用扩展名执行此操作(例如 numba或赛通)。您能否提供任何需要优化这个非常小的操作的上下文?
  • 如果您认为这行代码会对程序的运行时间产生重大影响,您可以尝试两种方式,看看是否有任何影响(剧透:不会)。跨度>
  • 优化比较在这里似乎是一个红鲱鱼。 Python 中的函数调用非常昂贵,这意味着递归回文检查将阻碍对结果所做的任何事情。构建产品的方式也非常低效,每个值至少检查两次,但大多数值更多。
  • 即使对于第一次检查失败的大数字的最坏情况,return num == num[::-1] 也比您的递归检查快 10%(这种差异大致与最大值检查所用的一样多)。对于需要检查所有数字的实际回文,您的版本要慢五倍。请注意,如果数字是按升序生成的,则无需检查新数字是否大于上一个数字。

标签: python optimization


【解决方案1】:

代码 2 是更好的选择,因为在代码 1 中,您必须将数字与 2 个命令 (

祝你的程序好运,玩得开心!

乔纳斯

【讨论】:

  • “与 3 个命令比较”是什么意思?只进行了一次比较,即&gt;
  • 如果你想比较它们,你还必须检查它们是否是相同的值。
  • 第一个代码不检查它们是否是相同的值。似乎也不需要进行这种比较 - 如果它们相同,那么 biggest_value 已经等于 value 定义,不需要做任何事情。
  • 哦,好吧,现在我明白你的问题了。感谢您纠正我;)如果您想知道哪个更快,您可以使用这两个代码运行速度测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多