擅长:python、mysql、java
<p>假设,如您的示例所示,您希望“实词”以其原始顺序出现,则可以直接执行此操作(每个所需的输出字符串只生成一次,无需重复,也无需“剔除”无关的字符串)。每个单词需要一个“slot”,每个pad字符需要一个slot,其中pad字符的总数是指定的最终长度减去单词长度之和。在您的示例中,有两个长度为4的单词,总单词长度为8,因此每个输出字符串中需要12-8=4个填充字符。总共有6个插槽(2个用于单词,4个用于填充字符)。因此,输出字符串的总数为6-choose-2=6-choose-4=6*5/2=15。这也解释了如何使用<code>itertools.combinations</code>来获得结果:从所有槽索引集中选择2个单词的索引,或者-等价地-从所有槽索引集中选择4个填充字符的索引。这里的代码执行前者:</p>
<pre><code>def get_strings(words, pad, length):
from itertools import combinations
nwords = len(words)
npad = length - sum(len(word) for word in words)
nslots = nwords + npad
for ix in combinations(range(nslots), nwords):
result = [pad] * nslots
i = 0
for j in ix:
result[j] = words[i]
i += 1
yield "".join(result)
</code></pre>
<p>然后:</p>
^{pr2}$
<p>显示所需的15个字符串。在</p>