<p>我重构了更多,现在可读性更强:</p>
<pre><code>def replace_at_index(string, index, replacement):
"""
Credit to: http://stackoverflow.com/users/95612/jochen-ritzel
>>> replace_at_index("abc", 1, "z")
'azc'
"""
return string[:index] + replacement + string[index + 1:]
def possible_replaces(string):
"""
>>> list(possible_replaces('YXY00'))
['XXY00', 'YXY00', 'YXY00', 'YYY00', 'YXX00', 'YXY00', 'YXY00', 'YXY00']
>>> list(possible_replaces('XYY000000'))
['XYY000000', 'YYY000000', 'XXY000000', 'XYY000000', 'XYX000000', 'XYY000000', 'XYY000000', 'XYY000000', 'XYY000000', 'XYY000000', 'XYY000000', 'XYY000000']
"""
for index, char in enumerate(string):
if char in 'XY':
yield replace_at_index(string, index, 'X')
yield replace_at_index(string, index, 'Y')
else:
yield string
</code></pre>
<hr/>
<p>我还写了一个更一般的解决方案:</p>
<pre><code>def possible_replaces(string, to_multipy_replace = 'XY'):
"""
Returns a list of strings where each member of `to_multipy_replace` is replaced
by each member of said set.
>>> list(possible_replaces('YXY00'))
['XXY00', 'YXY00', 'YXY00', 'YYY00', 'YXX00', 'YXY00', 'YXY00', 'YXY00']
>>> list(possible_replaces('XYY0'))
['XYY0', 'YYY0', 'XXY0', 'XYY0', 'XYX0', 'XYY0', 'XYY0']
"""
for index, char in enumerate(string):
if char in to_multipy_replace:
for replacement in to_multipy_replace:
yield replace_at_index(string, index, replacement)
else:
yield string
</code></pre>
<p>你现在不仅限于“XY”,而是任何你喜欢的字符集。你知道吗</p>