2013-04-28 146 views
5

在使用itertools permutations函数后列表中存在一些问题。将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 2013-04-28 16:58:52

回答

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 2013-04-28 16:37:45

+0

是的,从OP复制那条线用于上下文。 – 2013-04-28 18:33:38

0

一个衬垫

[''.join(h) for h in [list(k) for k in longestWord("aah")]]