擅长:python、mysql、java
<p>所以,我们可以用一种非常简单的方法来做。我们需要创建两个列表:</p>
<pre><code>user_type.split('a') == ['40', '', '']
itertools.product('78', repeat=user_type.count('a')) == [('7', '7'), ('7', '8'), ('8', '7'), ('8', '8')]
</code></pre>
<p>现在,对于我们的每一对,我们需要交错它们。<code>itertools</code>文档提供了一个名为<code>roundrobin()</code>的好方法:</p>
<pre><code>import itertools
# Round Robin recipe from the itertools documentation
def roundrobin(*iterables):
"roundrobin('ABC', 'D', 'EF') > A D E B F C"
# Recipe credited to George Sakkis
pending = len(iterables)
nexts = itertools.cycle(iter(it).next for it in iterables)
while pending:
try:
for next in nexts:
yield next()
except StopIteration:
pending -= 1
nexts = itertools.cycle(itertools.islice(nexts, pending))
</code></pre>
<p>让我们把这些放在一起:</p>
<pre><code>user_type = "40aa"
user_count = user_type.count('a')
for replacement in itertools.product('78', repeat=user_count):
print ''.join(roundrobin(user_type.split('a'), replacement))
</code></pre>
<p>输出:</p>
<pre><code>4077
4078
4087
4088
</code></pre>