首页 > 解决方案 > 为什么我的代码没有返回列表 ls 中不大于 t 的 k 个数字的总和?

问题描述

import itertools

def choose_best_sum(t, k, ls):
    combos = itertools.combinations(ls, k)
    sums = [sum(combo) for combo in combos]
    for s in sums:
        if s > t:
            sums.remove(s)
    return max(sums)

这是我迄今为止编写的代码。首先,我使用 ls 获得 k 和的所有组合的组合itertools.combinations()。然后,我对这些组合中的每一个求和,对总和进行迭代,并删除所有大于我的极限值 t 的元素。

但是由于某种原因,此代码不起作用。它在最终的 max(sums) 返回中返回大于 t 的值,我不明白为什么会发生这种情况。

标签: pythonpython-3.x

解决方案


只是一个猜测:这是因为您在迭代时删除了.

有时在循环列表时更改列表很诱人。但是,创建一个新列表通常更简单、更安全。

您可以改用列表推导(它甚至更有效):

import itertools

def choose_best_sum(t, k, ls):
    return max(sum(combo) for combo in itertools.combinations(ls, k) if sum(combo) < t)

推荐阅读