gpt4 book ai didi

python - 计算列表从0到n-1的元素之和,并与最大的比较

转载 作者:行者123 更新时间:2023-11-28 22:42:22 24 4
gpt4 key购买 nike

我正在尝试编写一个代码来检查给定列表的某些元素组合的总和是否等于此列表中的最大元素。我写了这样一段代码:

def function(argument): 

max_arg = max(argument)
argument.remove(max_arg)
for i in argument:

if sum(argument[0:i+1]) == max_arg:
return "true"
else:
return "false"

print function([1, 2, 3, 6])

我得到了“false”字符串(这是一个明显的错误)。有人可以指出,上面提供的代码有什么问题吗?

最佳答案

你犯了几个错误:

  • 您将值与索引混淆了。 for 循环为您提供列表中的值,而不是列表中的索引。仅因为您的值是整数,您的循环才不会立即中断。

    也就是说,i不是设置为012,而是设置为123

  • 当您发现总和不是最大值的组合时,您立即从函数返回'false'。第一个总和是 3(值 1 然后转换为 sum(argument[0:2]) 产生 3),但您不会让循环继续。

要修复这些错误,请对 range() 函数的结果进行循环,并在尝试所有组合时仅返回 'false':

def function(argument): 
max_arg = max(argument)
argument.remove(max_arg)

for i in range(len(argument)):
if sum(argument[:i + 1]) == max_arg:
return "true"
return "false"

您的“不同组合”仍然很原始。您可以尝试使用 itertools.combinations() 生成 3 个数字的所有可能组合。和增加长度:

from itertools import combinations

def function(argument):
max_arg = max(argument)
argument.remove(max_arg)

for length in range(1, len(argument) + 1):
for combo in combinations(argument, length):
if sum(combo) == max_arg:
return "true"
return "false"

现在元素的排列顺序不再重要; [1, 4, 3, 2, 6] 将返回 true,因为 1 + 3 + 2 产生 6。

演示:

>>> function([1, 2, 3, 6])
'true'
>>> function([1, 4, 3, 2, 6])
'true'
>>> function([1, 4, 3, 6])
'false'

关于python - 计算列表从0到n-1的元素之和,并与最大的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31825996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com