<p>下面的<a href="https://wiki.python.org/moin/Generators" rel="nofollow">generator function</a>使用<a href="https://docs.python.org/2/library/functions.html#enumerate" rel="nofollow">^{<cd1>}</a>、<a href="https://docs.python.org/2/library/functions.html#zip" rel="nofollow">^{<cd2>}</a>、<a href="https://docs.python.org/2/library/itertools.html#itertools.product" rel="nofollow">^{<cd3>}</a>、a <a href="https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions" rel="nofollow">list comprehension</a>和<a href="https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists" rel="nofollow">argument list unpacking</a>生成所有需要的字符串,所有这些都是非常方便的<code>Python</code>工具/概念,您应该仔细阅读:</p>
<pre><code>from itertools import product
def multi_replace(s, d):
indexes, replacements = zip(*[(i, d[c]) for i, c in enumerate(s) if c in d])
# indexes: (1, 3)
# replacements: (['A', 'G'], ['C', 'T'])
l = list(s) # turn s into sth. mutable
# iterate over cartesian product of all replacement tuples ...
for p in product(*replacements):
for index, replacement in zip(indexes, p):
l[index] = replacement
yield ''.join(l)
d = {'R': ['A', 'G'], 'Y': ['C', 'T']}
s = 'ARCY'
for perm in multi_replace(s, d):
print perm
AACC
AACT
AGCC
AGCT
s = 'RRY'
AAC
AAT
AGC
AGT
GAC
GAT
GGC
GGT
</code></pre>