彻底改变n长度的穷举字符

时间:2018-05-04 16:46:55

标签: python

我非常擅长Python,但是这个问题真的让我烦恼,我需要帮助。

鉴于以下内容:

alphabet_string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
letters = [x for x in alphabet_string]
max_replacements = 3

我希望找到所有可能的替代品max_replacements

因此,例如,第一次迭代会将其添加到列表中:

AACDEFGHIJKLMNOPQRSTUVWXYZ

BA替换的地方 - 因为它是letters列表中的第一个元素。第二次迭代将执行此操作:

ABADEFGHIJKLMNOPQRSTUVWXYZ

依此类推。通过letters完成对alphabet_string的完整迭代后,替换将开始如下:

AAADEFGHIJKLMNOPQRSTUVWXYZ

然后:

ABAAEFGHIJKLMNOPQRSTUVWXYZ

等等。

它可能非常简单,但我迷失了。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

我递归地做。我在输出中获得了正确数量的项目,我手动检查它是否有更简单的问题。感谢您提出这个问题,这真的很有趣!

alphabet_string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
max_replacements = 3

def find_neighbours(word, alphabet, n):
    if n < 0:
        raise ValueError("negative n!")
    if n == 0:
        return [word]
    out = []
    for l in alphabet:
        k = n if l == word[0] else n-1
        res = find_neighbours(word[1:], alphabet, k)
        out += [l + r for r in res]
    return out    

out = find_neighbours(alphabet_string, alphabet_string, max_replacements)