回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>给定一组项目,例如:</p>
<p><code>[ 1, 2, 3, 4, 5, 6 ]</code></p>
<p>我想用重复来生成所有可能的长度组合。关键是我想从一个预先确定的组合开始(一种组合列表中的偏移量)。在</p>
<p>例如,从这个开始:</p>
<p><code>[ 1, 5, 6 ]</code></p>
<p>第一个(下一个)组合是:</p>
<p><code>[ 1, 6, 6 ]</code></p>
<p>我已经成功地使用<code>itertools.combinations_with_replacement()</code>来生成组合,但是这个项目需要使用一个生成太多组合的集合——首先创建它们并迭代到正确的点是不可能的。在</p>
<p>我发现<a href="https://stackoverflow.com/a/1776884/1167783">this example for generating kth combination</a>对我来说效果不太好。<a href="https://stackoverflow.com/a/794/1167783">This answer</a>似乎是另一种可能,但我似乎无法将其从C移植到Python。在</p>
<p>以下是我目前为止使用<a href="https://stackoverflow.com/a/1776884/1167783">kth combination example</a>的代码:</p>
<pre><code>import operator as op
items = [ 1,2,3,4,5,6 ]
# https://stackoverflow.com/a/4941932/1167783
def nCr(n, r):
r = min(r, n-r)
if r == 0:
return 1
numer = reduce(op.mul, xrange(n, n-r, -1))
denom = reduce(op.mul, xrange(1, r+1))
return numer // denom
# https://stackoverflow.com/a/1776884/1167783
def kthCombination(k, l, r):
if r == 0:
return []
elif len(l) == r:
return l
else:
i = nCr(len(l)-1, r-1)
if k < i:
return l[0:1] + kthCombination(k, l[1:], r-1)
else:
return kthCombination(k-i, l[1:], r)
# get 1st combination of 3 values from list 'items'
print kthCombination(1, items, 3)
# returns [ 1, 2, 4 ]
</code></pre>
任何帮助都是伟大的!在</p>