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

时间:2015-03-03 02:20:10

标签: python python-3.x

我正在尝试在python中编写Scrabble解算器。我想迭代8个字母,并希望它们像这样迭代?

  

Z =“asdfghjk

     

(一些代码)

     

打印(迭代)

     

(如,广告,AF,AG,啊,..... SA,SADF,FGH,)

     

每个可能的长度和可能的1-8字母长的字母排列。

3 个答案:

答案 0 :(得分:1)

使用itertools.combinations轻松。

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, 

答案 1 :(得分:1)

您可以使用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个组合 - 只更新为字符数,范围为8,所有可能的排列为1到8。

答案 2 :(得分:0)

你的例子不是你的问题陈述的好例子(拼字游戏) 。在您的示例中,您假设每个字母在您的图块集中是唯一的。您还遗漏了单个字母实例。在这一点上,“itertools”的答案已经陷入了你用你的例子奠定的陷阱。

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