【问题标题】:Find the highest sum combination with conditions from a list从列表中查找具有条件的最高总和组合
【发布时间】:2020-10-13 14:10:49
【问题描述】:

所以我有一个 360 元素列表,我想找到 11 个数字组合的最大总和,但有一个条件。让它更清楚一点:

1-获取一个列表作为输入

2-创建11个数字的组合列表

3-检查特定条件的列表

4-如果是,返回列表的总和

我尝试使用 itertools.combination 然后检查条件,但只要我的列表真的很大,它就需要很长时间。所以我想知道是否有一种方法可以先检查条件而不是创建所有组合然后过滤他们出去。

编辑:伙计们,我认为您没有很好地理解我的问题。我想首先获得列表的组合(例如排列),而不仅仅是最高的 11 个数字

【问题讨论】:

  • 您的具体情况如何?总和应该是最大值?
  • 为什么不sorted 列表,降序,然后选择前11 个?如果你需要索引,你可以从原始列表中find你需要的数字。

标签: python arrays python-3.x combinations itertools


【解决方案1】:

为什么不对列表进行排序,降序排列,然后选择前 11 个?如果您需要索引,您可以从原始列表中找到您需要的数字。

import random
import pprint

original_items = random.choices(range(999), k=360)
pprint.pprint(original_items)

highest_11 = sorted(original_items, reverse=True)[:11]
pprint.pprint(highest_11)

【讨论】:

  • 我的意思是最高的 11 个组合。就像在 itertools.combination(list, 11) 中一样
  • 我认为关键在于itertools 方法本身就很慢。如果您需要更好的运行时,您将需要改变您的方法。
【解决方案2】:

通常,对列表进行排序并找到满足您条件的前 11 个数字。 即使您的条件是不确定的,您仍然可以将搜索本身的运行时间减少到线性(因此运行时间将取决于条件)。

【讨论】:

  • 我的意思是最高的 11 个组合。就像在 itertools.combination(list, 11) 中一样
猜你喜欢
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 2022-06-14
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多