我不知道如何在Python中使用max函数
编程对我来说是新事物,这是我作为程序员的第三天,我正在尝试解决Project Euler的问题,然后我遇到了问题4: 查找由两个3位数字的乘积构成的最大回文 以下是我的解决方案:我不知道如何在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
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))