假设我有一个从 1 到 8 的简单列表,并且只想要包含 7 个字符的组合。我怎样才能有效地做到这一点?是否可以在不迭代整个列表的情况下做到这一点?
例如,这会执行整个列表:
import itertools
stuff = [1, 2, 3,4,5,6,7,8]
count = 0
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
print(subset)
count = count + 1
print count #returns 256 results with 8 matching the 7 length
如果您将 L in 更改itertools.combinations(stuff, L):
为 7,那么它可以工作,但它会给您很多重复项(72 个结果,大多数是重复项)。我知道我可以从上面的代码中提取我想要的 7 项,但是对于更大的列表,我这样做似乎效率低下。有什么建议么?
在这种情况下,我正在寻找的最终结果是:
(1, 2, 3, 4, 5, 6, 7)
(1, 2, 3, 4, 5, 6, 8)
(1, 2, 3, 4, 5, 7, 8)
(1, 2, 3, 4, 6, 7, 8)
(1, 2, 3, 5, 6, 7, 8)
(1, 2, 4, 5, 6, 7, 8)
(1, 3, 4, 5, 6, 7, 8)
(2, 3, 4, 5, 6, 7, 8)