给出一个单词,打印单词中字母的每个可能的重新排列。
word = input("Write your word:")
我的尝试如下:
len(word)的阶乘提供了排列的数量。
count = 1
i = len(word)
while i > 0:
count *= i
i-=1
factorial = count # i!
f_minus = int(count/len(word)) # (i - 1)!
print("There are " + str(count) + " ways to arrange " + str(len(word)) \
+ " letters.")
创建一个列表以附加重新排列的单词。
inside_list = []
for i in range(len(word)):
inside_list.append('')
创建一个列表以包含每个inside_list。
container_list = []
for i in range(factorial):
container_list.append(inside_list)
变量f_minus提供有关每个字母出现在单词开头的次数的详细信息。坚持使用' farm',f_minus =(4-1)! = 6.这告诉我们每个字母出现在第一个位置六次。以下for循环打印' f'六次,其次是六次&等,等等。
for index in range(factorial):
print(index + 1, word[index//f_minus])
因此,以下for循环将字母分配给每个嵌套列表的第一个元素。
for index in range(factorial):
container_list[index][0] = word[index//f_minus]
print(container_list)
如何将迭代保存到列表列表中,以便“f”,“' s''''' ; m进入嵌套列表的第一个元素,而不是所有的#?即前6个列表中有一个' f'作为他们的第一个元素,接下来的6个列表中有一个' a'作为第一个元素,等等。
答案 0 :(得分:1)
为此目的,已经有一个名为documentation的函数。您可以使用它而不是重新发明轮子。
from itertools import permutations
word = input("Write your word:")
print (["".join(wd) for wd in permutations(word, len(word))])
>>> Write your word:asd
>>> ['asd', 'ads', 'sad', 'sda', 'das', 'dsa']