使用for循环在列表列表中的项目分配

时间:2016-03-17 21:32:04

标签: python-3.x

打印所有字母排列方式。

给出一个单词,打印单词中字母的每个可能的重新排列。

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'作为第一个元素,等等。

1 个答案:

答案 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']