Par*_*gue 1 python iteration algorithm dictionary permutation
假设我们有这样的数据结构:
class Lock:
def __init__(self):
self.data1 = ['a', 'd', 'e', 'l', 's']
self.data2 = ['s', 'i', 'r', 't', 'n']
self.data3 = ['b', 'o', 'e', 'm', 'k']
self.data4 = ['f', 'y', 'u', 'n', 'g']
Run Code Online (Sandbox Code Playgroud)
或者,
d = {'1': ['a', 'd', 'e', 'l', 's'], '2': ['s', 'i', 'r', 't', 'n'], '3': ['b', 'o', 'e', 'm', 'k'], '4': ['f', 'y', 'u', 'n', 'g'] }
Run Code Online (Sandbox Code Playgroud)
我希望找到每个可能的字母组合,因为每个字母都是从不同的键或数组中选择的.订单很重要,因此第一个字母必须始终来自'data1',第二个字母必须来自'data2'等.
目的是然后根据字典检查这些,以查看哪些是英语有效的单词.我假设得到所有组合的列表,然后进行检查将是最快的,但如果不是这样,我想要一些输入.
for combo in itertools.product(self.data1, self.data2, self.data3, self.data4):
# combo is a tuple of 4 characters.
Run Code Online (Sandbox Code Playgroud)
要么:
for combo in itertools.product(*[d[k] for k in sorted(d.keys())]):
# combo is a tuple of 4 characters.
Run Code Online (Sandbox Code Playgroud)
演示:
>>> import itertools >>> d = {'1': ['a', 'd', 'e', 'l', 's'], '2': ['s', 'i', 'r', 't', 'n'], '3': ['b', 'o', 'e', 'm', 'k'], '4': ['f', 'y', 'u', 'n', 'g'] }
>>> for combo in itertools.product(*[d[k] for k in sorted(d.keys())]):
... print ''.join(combo)
...
asbf
asby
asbu
asbn
asbg
asof
asoy
asou
ason
asog
asef
...
snkf
snky
snku
snkn
snkg
Run Code Online (Sandbox Code Playgroud)