我不知道如何在Python中使用max函数

我不知道如何在Python中使用max函数,python,list,function,max,Python,List,Function,Max,编程对我来说是新事物,这是我作为程序员的第三天,我正在尝试解决Project Euler的问题,然后我遇到了问题4: 查找由两个3位数字的乘积构成的最大回文 以下是我的解决方案: for a in range(100, 1000): for b in range(100, 1000): if str(a * b) == str(a * b) [ : :-1]: largest = max(a *b) print(larges

编程对我来说是新事物,这是我作为程序员的第三天,我正在尝试解决Project Euler的问题,然后我遇到了问题4:

查找由两个3位数字的乘积构成的最大回文

以下是我的解决方案:

for a in range(100, 1000):
    for b in range(100, 1000):
        if str(a * b) == str(a * b) [ : :-1]:
            largest = max(a *b)
            print(largest)
我发现所有回文都没有最大=maxa*b行,但是我找不到最大的数字,并且对max函数的用法感到困惑。您能帮我解释一下吗?

max用于数字2或更多的集合,而不仅仅是一个,您可以使用自己的变量来模拟它:

largest = 0 # this will hold the maximum palindrome

for a in range(100, 1000):
    for b in range(a, 1000):
        c = a * b  #  calculate a * b one time only for each iteration
        if (str(c) == str(c)[::-1]) and c > largest:
            largest = c

print(largest)  #  ===>  906609
# This variable keeps track of the largest palindrom found
largest = 0

for a in range(100, 1000):
    for b in range(100, 1000):

        res = a * b

        # Check if you found a palindrome
        if str(res) == str(res) [::-1]:

            # Check if the found palindrom is larger 
            # than the currently largest found palindrome
            if res > largest:
                largest = res
print(largest)
第二个循环从a开始,以避免重复计算,例如:将计算100*999,但不会计算999*100,因为乘法是可交换的

使用max,您可以这样做:

largest = max(a * b for a in range(100, 1000) for b in range(a, 1000) if str(a * b) == str(a * b)[::-1])

print(largest)  #  ===>  906609
而且,在Python 3.8+中,您可以使用walrus操作符为每次迭代计算a*b一次:

largest = max(c for a in range(100, 1000) for b in range(a, 1000) if str(c := a * b) == str(c)[::-1])

print(largest)  #  ===>  906609

代码中存在逻辑问题

你在循环所有的“a”,对于所有的“a”,你在循环所有的“b”。 对于所有“a”中的“b”,你说的最大值是单个数字“a*b”的最大值,这没有多大意义,然后你打印出来

您有两种解决方案:

或者,当结果为正时,将“最大值”初始化为0,然后如果发现结果,请检查其是否大于当前初始化为0的值,如果大于,请将其替换。你什么时候做这个?当您不需要保留其他结果时,只有最大值才重要。 创建一个空列表,每次有结果时,将其添加到此列表中,然后在末尾查找此列表的最大值。你什么时候做这个?当您稍后将使用其他值时,不方便的是您存储了所有内容,然后对其执行最大值,但性能较低 您可以在iterable上使用max内置函数:

从:

maxarg1,arg2,*args[,键]

返回iterable中最大的项,或两个或多个项中最大的项 争论

您可以使用:

max(a * b for a in range(100, 1000) for b in range(100, 1000) if str(a * b) == str(a * b) [ : :-1])
输出:

906609
max是这里使用的错误函数。如果maxany_数为标量值,则maxany_数的结果将始终是任意_数本身的值

您需要做的是跟踪到目前为止发现的最大回文。如果发现回文大于此值,则要覆盖记录获取变量:

largest = 0 # this will hold the maximum palindrome

for a in range(100, 1000):
    for b in range(a, 1000):
        c = a * b  #  calculate a * b one time only for each iteration
        if (str(c) == str(c)[::-1]) and c > largest:
            largest = c

print(largest)  #  ===>  906609
# This variable keeps track of the largest palindrom found
largest = 0

for a in range(100, 1000):
    for b in range(100, 1000):

        res = a * b

        # Check if you found a palindrome
        if str(res) == str(res) [::-1]:

            # Check if the found palindrom is larger 
            # than the currently largest found palindrome
            if res > largest:
                largest = res
print(largest)

根据MrGeek的回答,您可以使用max函数,该函数需要两个参数或一个列表:

最大=0这将保留最大回文数 对于范围为100、1000的: 对于范围A中的b,1000: c=a*b 如果strc==strc[:-1]: 最大=最大,最大 最大的 以下是该功能的文档:


将最大/最小函数应用于iterable以查找最大/最小值。因此,您需要将值存储在列表中并应用该函数

palindrome_lst = list()

for a in range(100, 1000):
    for b in range(100, 1000):
        if (str(a*b))==(str(a * b)[ : :-1]):
            pal = str(a*b)
            palindrome_lst.append(int(pal))

print(max(palindrome_lst))