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

时间:2020-02-24 11:57:53

标签: python list function max

编程对我来说是新手,这是我作为程序员的第三天,我试图解决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)

我发现没有largest = max(a * b)行的所有回文,但是找不到最大的回文数,并且对max函数的用法感到困惑。您能帮我解释一下吗?

6 个答案:

答案 0 :(得分:6)

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

第二个循环从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

答案 1 :(得分:1)

您的代码中存在逻辑问题。

您要遍历所有“ a”,然后要遍历所有“ b”。 对于所有“ a”中的所有“ b”,您说的最大是单个数字“ a * b”的最大值(这没有多大意义),然后打印出来。

您有两种解决方案:

  1. 要么将“最大”值初始化为0(因为结果为肯定值),然后找到结果,然后检查它是否大于当前值(初始化为0),如果是,则替换它。你什么时候做的?当您不需要保留其他结果时,只有最大值很重要。
  2. 您创建一个空列表,每当有结果时,将其添加到该列表中,最后寻找该列表的最大值。什么时候做的?以后再使用其他值时,不便之处是您存储所有内容,然后对其进行最大处理(性能较差)

答案 2 :(得分:1)

您可以在可迭代的对象上使用max内置函数:

来自docs

max(arg1,arg2,* args [,key])

以可迭代形式返回最大的项,或者返回两个或多个中的最大项 争论。

您可以使用:

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

输出:

906609

答案 3 :(得分:1)

按照MrGeek的回答,您可以这样使用max()函数(需要两个参数或一个列表):

largest = 0 # this will hold the maximum palindrome

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

print(largest)

以下是该功能的文档:

答案 4 :(得分:1)

(max / min)函数应用于迭代查找(最大/最小)值。因此,您需要将值存储在列表中并应用该函数。

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))

答案 5 :(得分:0)

max()是在此处使用的错误函数。以max(any_number)为标量值的any_number的结果将始终是any_number本身的值。

您需要做的是跟踪迄今为止发现的最大的回文。而且,如果您发现一个大于该值的palindrom,请覆盖记录采用变量:

# 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)
相关问题