python - 为什么我的代码没有返回列表 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 的值,我不明白为什么会发生这种情况。
解决方案
只是一个猜测:这是因为您在迭代时删除了.
有时在循环列表时更改列表很诱人。但是,创建一个新列表通常更简单、更安全。
您可以改用列表推导(它甚至更有效):
import itertools
def choose_best_sum(t, k, ls):
return max(sum(combo) for combo in itertools.combinations(ls, k) if sum(combo) < t)
推荐阅读
- regex - 正则表达式使用记事本++从一个巨大的文档中删除相同的部分
- angular - 调用传单标记的onClick时,材质对话框卡住
- dart - 长文本颤动中的换行符
- parse-platform - 更改 PFObject 上的 ACL 不会持续到 Parse Server
- python - 导入 pip3 导致“ImportError: No module named 'pip3'
- python - python pdfkit不渲染封面
- javascript - 重新加载或回发后保持手风琴打开
- c# - 时间:2019-05-10 标签:c#windowsformssqltableupdate
- spring-boot - 带有 Spring Boot 的 Kafka 流
- timer - Flutter - 闪烁按钮