<p>您可以从<code>itertools</code>尝试其他工具:</p>
<pre><code>from itertools import combinations
s = "0a1b2c3d4e5"
positions = tuple(range(len(s)))
for i, j in combinations(positions, 2):
print(s[:i] + s[j] + s[i+1:j] + s[i] + s[j+1:])
</code></pre>
<p><strong>编辑</strong>:好的,再试一次:)。这就是你想要的吗:</p>
<pre><code>from itertools import combinations, product
s = "0a1b2c3d4e5"
r = "012345abcde"
for i, j in combinations(tuple(range(len(s))), 2):
for r1, r2 in product(r, r):
print(s[:i] + r1 + s[i+1:j] + r2 + s[j+1:])
</code></pre>
<p><strong>编辑2</strong>:如果要排除倍数,可以通过^{<cd2>统一:</p>
<pre><code>from itertools import combinations, product
s = "0a1b2c3d4e5"
r = "012345abcde"
output = []
for i, j in combinations(tuple(range(len(s))), 2):
for r1, r2 in product(r, r):
output.append(s[:i] + r1 + s[i+1:j] + r2 + s[j+1:])
output = set(output)
print(output)
</code></pre>
<p><strong>编辑3</strong>:我想不出你的问题,这是如何扩展到更高数量的替换。我希望你不介意我添加一个概括。这有点复杂。而且产量增长很快。因此,我没有将其打印到控制台,而是使用了一个文件(带有详细的输出)。也许你感兴趣。没问题,如果不是的话,我玩得很开心。一个问题:你需要这些东西来解决现实世界的问题吗</p>
<pre><code>from itertools import combinations, product
# Base string
base = "0a1b2c3d4e5"
# Length of the base string
len_of_base = len(base)
# String with replacement characters
replacements = "012345abcde"
# Number of replacements
num_of_replacements = 3
output = {}
for istart, *imiddle, iend in combinations(range(len_of_base),
num_of_replacements):
for rstart, *rrest in product(replacements,
repeat=num_of_replacements):
new = base[:istart] + rstart
for i, j, r in zip([istart] + imiddle,
imiddle + [iend],
rrest):
new += base[i+1:j] + r
new += base[iend+1:]
if new not in output:
output[new] = {}
output[new]['positions'] = tuple([istart] + imiddle + [iend])
output[new]['replacements'] = tuple([rstart] + rrest)
with open('data.txt', 'w') as file:
for key in output:
file.write(f"{key} - "
f"Positions {output[key]['positions']} "
f"replaced with {output[key]['replacements']}\n")
</code></pre>
<p>输出:</p>
<pre><code>000b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '0')
001b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '1')
002b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '2')
003b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '3')
004b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '4')
005b2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', '5')
00ab2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', 'a')
00bb2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', 'b')
00cb2c3d4e5 - Positions (0, 1, 2) replaced with ('0', '0', 'c')
...
</code></pre>