2013-04-28 23 views
5

itertools置換関数を使用した後にリストに問題があります。出力は次のようになりますitertools.permutationsの出力をタプルのリストから文字列のリストに変換する

from itertools import permutations 

def longestWord(letters): 
    combinations = list(permutations(letters)) 
    for s in combinations: 
     ''.join(s) 
    print(combinations) 

longestWord("aah") 

[('a', 'a', 'h'), ('a', 'h', 'a'), ('a', 'a', 'h'), ('a', 'h', 'a'), 
('h', 'a', 'a'), ('h', 'a', 'a')] 

私は、これは単純なリストになりたいが、それはタプルのリストとして出てきているようです(?)。誰もが、それは次のように出てくるので、私はこれをフォーマットすることができます:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 
+2

'combinations'が混乱して順列を呼び出します。 – DSM

答えて

8
from itertools import permutations 

def longestWord(letters): 
    return [''.join(i) for i in permutations(letters)] 

print(longestWord("aah")) 

の検索結果を:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 

いくつかの提案:

  1. 関数内では印刷しないで、代わりに戻り値を出力してください。
  2. 変数combinationのあなたの命名は良くない、組み合わせは順列
  3. 異なっているとしてあなたの参加何もしていなかった、値をインラインで変更しない参加するには、関数名は表していない文字列
  4. を返します。それは何ですか。一番長い言葉?
0

順列は、あなたがそれらを結合する必要があるので、タプルを返すイテレータを返します。 forループの代わりにマップを使用するのが良い方法です。

from itertools import permutations 

def longestWord(letters): 
    combinations = list(map("".join, permutations(letters))) 
    print(combinations) 

longestWord("aah") 

あなたがそれをやっていたように、あなたは、単一の文字列に、各タプルの文字に参加していますが、組み合わせのリストを変更することはなかったです。

0

代わりにこれを試してみてください:

combinations = permutations(letters) 
print [''.join(x) for x in combinations] 

を(あなたのjoinは本当に便利な何もしていませんでした - 参加は、その戻り値が保存されませんでした行った後。)

+0

ここでは 'list'は何も買っていません – Eric

+0

はい、コンテキストからOPの行をコピーしました。 –

0

1ライナー

[''.join(h) for h in [list(k) for k in longestWord("aah")]] 
関連する問題