2016-12-04 18 views
0

2つのリストをitertoolsと組み合わせる際にいくつか質問がありましたが、私の問題を解決するものは見つかりませんでした。それで、pythonでitertools(または他のモジュール)を使って次のことを行うことは可能でしょうか? 私は2つのリストを持っている:今、私はこのような結果として、それらを組み合わせることが解決策を探していますPythonの2つのリストの組み合わせ

list1 = ['Elizabeth', 'Anne', 'Wells', 'Cannon'] 
list2 = ['E.', 'A.', 'W.', 'C.'] 

は(例えば、リストのリストとして)次のようになります。

['Elizabeth', 'Anne', 'Wells', 'Cannon'] 
['E.', 'Anne', 'Wells', 'Cannon'] 
['Elizabeth', 'A.', 'Wells', 'Cannon'] 
['Elizabeth', 'Anne', 'W.', 'Cannon'] 
['Elizabeth', 'Anne', 'Wells', 'C.'] 
['E.', 'A.', 'Wells', 'Cannon'] 
['E.', 'Anne', 'W.', 'Cannon'] 
... 
['E.', 'A.', 'W.', 'C.'] 
+1

問題を解決しようとしたコードのいくつかを表示してみましたか? – aBiologist

答えて

0

長く生産し、指標の長い組み合わせ、そしてイニシャルと名前を置き換えるために、それらを使用します。

from itertools import combinations 

def replacements(names, initials): 
    for count in range(len(names)): 
     for positions in combinations(range(len(names)), count): 
      yield [initials[i] if i in positions else name for i, name in enumerate(names)] 
    yield initials 

したがって、上記の最初のanytに代わるものではありません。興(length = 0)は、次いで、(等[0]、次いで[1]をoutputing length = 1)要素、最大3個の置換([0, 1, 2][0, 1, 3]、等)へのすべての方法に取って代わります。最後に、「4置換」の場合としてinitialsを出力します。

デモ:もちろん

>>> names = ['Elizabeth', 'Anne', 'Wells', 'Cannon'] 
>>> initials = ['E.', 'A.', 'W.', 'C.'] 
>>> for result in replacements(names, initials): 
...  print(result) 
... 
['Elizabeth', 'Anne', 'Wells', 'Cannon'] 
['E.', 'Anne', 'Wells', 'Cannon'] 
['Elizabeth', 'A.', 'Wells', 'Cannon'] 
['Elizabeth', 'Anne', 'W.', 'Cannon'] 
['Elizabeth', 'Anne', 'Wells', 'C.'] 
['E.', 'A.', 'Wells', 'Cannon'] 
['E.', 'Anne', 'W.', 'Cannon'] 
['E.', 'Anne', 'Wells', 'C.'] 
['Elizabeth', 'A.', 'W.', 'Cannon'] 
['Elizabeth', 'A.', 'Wells', 'C.'] 
['Elizabeth', 'Anne', 'W.', 'C.'] 
['E.', 'A.', 'W.', 'Cannon'] 
['E.', 'A.', 'Wells', 'C.'] 
['E.', 'Anne', 'W.', 'C.'] 
['Elizabeth', 'A.', 'W.', 'C.'] 
['E.', 'A.', 'W.', 'C.'] 

、代わりに専用のinitialsリストを使用しての、あなただけのだけの初期を生成するname[0] + '.'を毎回使用することができます。

+0

ありがとう、これはかなりうまくいきます! –

関連する問題