2017-11-22 10 views
-1

を生成するために、私はすべての可能性に.-で(文字列にリストを読み込むことによって)リスト内の各xを交換したい交換は、リスト内のすべての可能な順列

['x', 'x', 'x..', 'x'] 

順列。したがって、出力は

['. . ... .'], 
['- - -.. -'], 
['. - -.. .'] 

と同様の順列になります。以下のスクリプトを試しましたが、出力として2つのパターンしか得ることができませんでした。

def fun(inputStringList): 
    message_received = inputStringList 
    message_received = ' '.join(inputStringList) 
    for i in range(len(message_received)): 
     x = 'x' 
     y = '.' 
    message = message_received.replace(x, y) 
    message1 = message.split(",") 
    print message1 
    for i in range(len(message_received)): 
     x = 'x' 
     y = '-' 
    message = message_received.replace(x, y) 
    message2 = message.split(",") 
    print message2 

def funTest(): 
    test = ['x', 'x', 'x..', 'x'] 
    print fun(test) 
funTest() 

出力:

['. . ... .'] 
['- - -.. -'] 

何をすべきか?

答えて

1

あなたは(x文字の数).と繰り返し-、そうproduct('.-', number=number_of_x_characters)製品をしたいです。

私は、生成された.-組み合わせを補間することを容易にするためにstr.format()を使用したい:

from itertools import product 

def fun(inputStringList): 
    count = sum(s.count('x') for s in inputStringList) 
    template = ' '.join(inputStringList).replace('x', '{}') 
    for replacements in product('.-', repeat=count): 
     yield template.format(*replacements) 

これは、発電機、それをループです:

>>> test = ['x', 'x', 'x..', 'x'] 
>>> for result in fun(test): 
...  print(result) 
... 
. . ... . 
. . ... - 
. . -.. . 
. . -.. - 
. - ... . 
. - ... - 
. - -.. . 
. - -.. - 
- . ... . 
- . ... - 
- . -.. . 
- . -.. - 
- - ... . 
- - ... - 
- - -.. . 
- - -.. - 
関連する問題