8

使用 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']
4

4 回答 4

10
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. 函数名并不代表它的作用。最长的词?
于 2013-04-28T16:16:21.860 回答
2

Permutations 返回一个产生元组的迭代器,因此您需要加入它们。地图是一种很好的方法,而不是你的 for 循环。

from itertools import permutations

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

longestWord("aah")  

您这样做的方式是将每个元组中的字母连接成一个字符串,但您没有更改组合列表。

于 2013-04-28T16:12:02.190 回答
0

试试这个:

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

(你join并没有真正做任何有用的事情——在执行连接之后,它的返回值没有被保存。)

于 2013-04-28T16:12:10.093 回答
0

一个班轮

[''.join(h) for h in [list(k) for k in longestWord("aah")]]
于 2013-04-28T19:18:29.703 回答