gpt4 book ai didi

python - 子集总和为 `itertools.combinations`

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:48 25 4
gpt4 key购买 nike

我在 python 中有一个整数列表,比方说:

weight = [7, 5, 3, 2, 9, 1]

我应该如何使用 itertools.combinations 来查找这些整数的所有可能的总和子集。这样我就得到了(一个包含 3 个整数的所需输出示例 - weight = [7, 5, 3]:

sums = [ [7], [7+5], [7+3], [7+5+3], [5], [5+3], [3] ]

与这些权重相关联的是另一个名为 luggages 的数组,它是一个包含行李名称及其相应重量的列表列表,格式如下:

luggages = [["samsonite", 7], ["Berkin", 5], ["Catelli", 3] .....]

我以这种方式创建了一个名为 weight 的数组。

weight = numpy.array([c[1] for c in luggages]) 

我可以为需要的行李名称做这件事。我试图以这种方式使用 itertools.combinations(根据建议):

comb = [combinations(weight, i) for i in range(len(luggages))]

我的目标:打印出所有可能的行李名称子集,我可以在给定 max_weight = 23 kg 的情况下,满足子集条件的每个子集的所有组合总和正好等于 23 公斤。简单来说,我必须打印出一个包含行李名称的列表,如果将其重量相加,则完全等于 max_weight = 23。请记住:行李只能在每个子集中选择一次,但它们可以出现在尽可能多的子集中。此外,每个子集中的项目数量无关紧要:它可以是 1 件行李、2 件、3 件……只要它们的总和正好等于 23。

最佳答案

正在研究旅行推销员,是吗?您可以使用每个人最喜欢的 Python 功能列表理解来做到这一点:

weight = [7, 5, 3, 2, 9, 1]

cmb = []
for x in range(1, len(weight) + 1):
cmb += itertools.combinations(weight, x)

#cmb now contains all combos, filter out ones over the limit

limit = 23

valid_combos = [i for i in cmb if sum(i) == limit]

print(valid_combos)

关于python - 子集总和为 `itertools.combinations`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420452/

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