1

このデータ構造があるとしましょう:

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']

または、

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'] }

各文字が異なるキーまたは配列から選択されていることを考えると、文字の可能なすべての組み合わせを見つけたいと思います。順序が重要であるため、最初の文字は常に「data1」から、2番目の文字は「data2」からである必要があります。

次に、これらを辞書と照合して、英語で有効な単語を確認します。すべての組み合わせのリストを取得し、チェックを実行するのが最速であると想定しましたが、そうでない場合は、いくつかの入力が必要です。

4

4 に答える 4

8

使用itertools.product()

for combo in itertools.product(self.data1, self.data2, self.data3, self.data4):
    # combo is a tuple of 4 characters.

また:

for combo in itertools.product(*[d[k] for k in sorted(d.keys())]):
    # combo is a tuple of 4 characters.

デモ:

>>> 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
于 2013-02-04T17:29:30.520 に答える
3

マーティンからの良い答えitertools.productは、最良の方法です。バージョン2.6で導入されて以来、Python2.5以前の昔ながらのスタイルに戻すことができます。

>>> [i1 + i2 + i3 + i4 for i1 in data1 for i2 in data2 for i3 in data3 for i4 in data4 ]
['asbf', 'asby', 'asbu', 'asbn', 'asbg', 'asof', 'asoy', 'asou', 'ason', 'asog', 'asef',
 'asey', 'aseu', 'asen', 'aseg', 'asmf', 'asmy', 'asmu', 'asmn', 'asmg', 'askf', 'asky', 
 'asku', 'askn', 'askg', 'aibf', 'aiby', 'aibu', 'aibn', 'aibg', 'aiof', 'aioy', 'aiou', 
 'aion', 'aiog', 'aief', 'aiey', 'aieu', 'aien', 'aieg', 'aimf', 'aimy', 'aimu', 'aimn', 
 'aimg', 'aikf', 'aiky', 'aiku', 'aikn', 'aikg', 'arbf', 'arby', 'arbu', 'arbn', 'arbg', 
 'arof', 'aroy', 'arou', 'aron', 'arog', 'aref', 'arey', 'areu', 'aren', 'areg', 'armf', 
 'army', 'armu', 'armn', 'armg', 'arkf', 'arky', 'arku', 'arkn', 'arkg', 'atbf', 'atby', 
 'atbu', 'atbn', 'atbg', 'atof', 'atoy', 'atou', 'aton', 'atog', 'atef', 'atey', 'ateu'
 ...
于 2013-02-04T17:37:00.757 に答える
1

itertoolsを使用しない:

 def combination(x):
     list1 = g.values()[0]
     list2 = g.values()[1]
     for i in list1:
         for j in list2:
              print(i+j)
 combination({'1':['a','b'], '2':['c','d']})
于 2018-05-02T06:43:52.647 に答える
-1
x={'1':['a','b'], '2':['c','d']}
list1 = x.get('1')
list2 = x.get('2')
  for i in range(2):
    for j in range(2):          
      print(list1[i]+list2[j])
于 2018-12-02T13:54:13.300 に答える