【发布时间】:2021-03-13 11:35:54
【问题描述】:
给定一个数字列表,list = [0,1,2,10,21,25,30,33,34,35],我想在 python 上找到总和为 100 的这些数字的所有排列。
但是我希望能够多次使用列表中的值,并且我希望能够选择排列的长度。
例如,如果排列的长度是 3,我会返回:[[30, 35, 35], [33, 33, 34], [33, 34, 33], [34, 33, 33], [35, 30, 35], [35, 35, 30]]。
我已经能够为长度 3 执行此操作。但是,我找到了总和为 100 的 3 个数字的所有组合,然后对其进行过滤以删除包含原始列表之外数字的解决方案。
问题是我不能按照这种方法处理长度为 4、5、6 的排列,因为有更多的组合。
谢谢
【问题讨论】:
-
欢迎来到 StackOverflow。显示到目前为止您尝试过的内容(代码)。阅读:How to create a Minimal, Reproducible Example.
-
您确定要更改顺序重复吗?你说过你有 6 个长度为 3 的答案,但实际上只是 2 个组合,数字顺序不同:1. 30 x1,35 x2:
[30, 35, 35], [35, 30, 35], [35, 35, 30]2。 33 x2、34 x1:[33, 33, 34], [33, 34, 33], [34, 33, 33]。 -
@aneroid - 是的,我意识到我实际上只想要提供 2 个元素的外壳。但是anyrg给出的解决方案很好,因为它很容易摆脱重复的情况。 ty
-
不要删除重复项——随着大小/长度的增加会有很多重复项——使用一开始就不会产生重复项的东西。使用@anyryg 的解决方案,但使用
itertools.combinations_with_replacement而不是itertools.product。
标签: python list permutation