如何迭代8个字母,我希望它们在长度和内容上迭代?python

如何迭代8个字母,我希望它们在长度和内容上迭代?python,python,python-3.x,Python,Python 3.x,我正在尝试用python编写一个拼字解算器。我想迭代一个8个字母,并希望它们的长度像这样迭代 z=“asdfghjk (一些代码) 打印(迭代) (as、ad、af、ag、ah………sa、sadf、fgh) 每种可能的长度和可能的字母排列,长度为1-8个字母 使用itertools.com组合很容易 from itertools import combinations from math import factorial as fac # extra z = "asdfghjk" n = l

我正在尝试用python编写一个拼字解算器。我想迭代一个8个字母,并希望它们的长度像这样迭代

z=“asdfghjk

(一些代码)

打印(迭代)

(as、ad、af、ag、ah………sa、sadf、fgh)

每种可能的长度和可能的字母排列,长度为1-8个字母


使用itertools.com组合很容易

from itertools import combinations
from math import factorial as fac  # extra

z = "asdfghjk"
n = len(z)  # extra
for i in range(1, 9):
    print("{} of {}, {} combinations".
          format(i, n, fac(n) // (fac(i)*fac(n-i))))  # extra
    for combo in combinations(z, i):
        print(''.join(combo), end = ', ')
    print('\n')  # extra
标记为“#extra”的行不是必需的,只是为了更好地显示而添加的

1 of 8, 8 combinations
a, s, d, f, g, h, j, k, 

2 of 8, 28 combinations
as, ad, af, ag, ah, aj, ak, sd, sf, sg, sh, sj, sk, df, ...

(etc)

7 of 8, 8 combinations
asdfghj, asdfghk, asdfgjk, asdfhjk, asdghjk, asfghjk, adfghjk, sdfghjk, 

8 of 8, 1 combinations
asdfghjk, 

您可以使用itertools库来实现此目标:

>>> import itertools
>>> letters = 'abc'
>>> combinations = set()
>>>
>>> for i in range(len(letters)):
...     combinations.update(
...        [''.join(x) for x in itertools.permutations(letters, i + 1)])
>>>
>>> for combination in sorted(combinations):
...     print(combination)
a
ab
abc
ac
acb
b
ba
bac
bc
bca
c
ca
cab
cb
cba

这显示了从1到3的组合——对于所有可能的排列1到8,只需更新到字符数,范围为8。

您的示例不是问题陈述(拼字)的好示例 。在您的示例中,您假设每个字母在一组图块中都是唯一的。您还忽略了单个字母的实例。此时,“itertools”答案已落入您与示例一起设置的陷阱


例如,假设您持有8个A(我不记得每个字母的最大数字是多少)。那么可能的组合是8.A,AA,…AAAAAAAA。

有任何代码来补充这个问题吗?这个解决方案处理“字母='aba'”之类的事情,尽管For循环应该是“范围内的I”(len(字母)):“我如何将组合保存在列表中?追加而不是打印。你说的是“从1-8个字母开始的每一个可能的长度和可能的字母排列”——这是排列而不是组合,正如我阅读你最初问题陈述的方式。您可以在此处查看更多信息: