Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 存储两个数字中较大数字的最佳方法_Python_Optimization - Fatal编程技术网

Python 存储两个数字中较大数字的最佳方法

Python 存储两个数字中较大数字的最佳方法,python,optimization,Python,Optimization,我正在努力使我的python程序尽可能地优化,这一部分我不确定。我需要存储到目前为止获得的最大值,我有两个候选代码。哪一个时间优化最多?或者有没有更快的方法 代码1: if value > biggest_value: biggest_value = value 代码2: biggest_value = max(biggest_value, value) 背景: def check_palindrome(num): num = str(num) if len(n

我正在努力使我的python程序尽可能地优化,这一部分我不确定。我需要存储到目前为止获得的最大值,我有两个候选代码。哪一个时间优化最多?或者有没有更快的方法

代码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()
def check_回文(num):
num=str(num)
如果len(num)<1:
返回真值
其他:
如果num[0]==num[-1]:
返回检查\u回文(num[1:-1])
其他:
返回错误
def main():
最大乘积=0
对于范围(1001000)内的a:
对于范围(1001000)内的b:
产品=a*b
如果检查回文(产品):
#在这里存放最大的产品
返回最大的产品
main()

代码2是更好的选择,因为在代码1中,您必须将数字与2个命令(<=)进行比较,而在代码2中,您只有一个命令

祝你的节目好运,玩得开心


Jonas

你可以简单地衡量哪一个在你的情况下更快,然后你就会知道。尽可能地优化这一点可能意味着根本不做这件事(例如预先排序值)、批量做这件事(例如通过numpy)或使用扩展做这件事(例如numba或Cython)。你能提供任何需要优化这个非常小的操作的上下文吗?如果你认为这一行将对你的程序的运行时间产生重大影响,你可以尝试两种方法,看看它是否有任何效果(破坏者:不会)。优化比较在这里看起来像是一条红鲱鱼。函数调用在Python中非常昂贵,这意味着递归回文检查将阻碍对结果所做的任何操作。构造产品的方法也非常低效,每一个值至少检查两次,但大多数值的检查次数要多得多。即使对于第一次检查失败的大数的最坏情况,
return num==num[::-1]
比递归检查快10%(这一差异大致相当于最大值检查的速度)。对于需要检查所有数字的实际回文,您的版本要慢五倍。请注意,如果数字是按升序生成的,则无需检查新数字是否大于上一个数字。您所说的“与3个命令进行比较”是什么意思?只执行一次比较,即
。如果要比较它们,还必须检查它们是否为相同的值。第一个代码不检查它们是否为相同的值。似乎也没有必要进行这种比较——如果它们是相同的,那么根据定义,
最大值
已经等于
,无需做任何事情。哦,好吧,现在我明白你的问题了。谢谢你纠正我;)如果你想知道哪个更快,你可以用这两种代码运行速度测试。