python中长度为n的列表的排列

时间:2015-06-19 23:55:46

标签: python permutation

所以我开始学习python并考虑练习,我会尝试编写一个小脚本,看看能否。事实证明我无法做到这一点并且会离开它,但是有点坚定,现在对这个特殊的功能有一个仇杀。

我想让代码获取给定数字的原始输入,并从中生成所有可能的数字列表的排列。例如。如果输入为“5”,那么它将为[1,2,3,4,5]生成长度为5的所有排列。

我尝试的内容如下:

from itertools import permutations
from math import factorial

n = raw_input("Input number to generate permutation list")

factorial_func = factorial(n)

print "there are %s permutations as follows:" %(factorial_func)

print list(permutations([1:n], n))

我知道故障线是第10行因为[1:n]部分,我不知道如何让它从1到n制作一个列表并将其放入置换函数中。 (我希望通过[1:n]它会生成一个从1到n的列表,就像你可以使用它来访问列表中a到b的部分列表一样[a:b]但似乎是不是这样的)

很抱歉,如果这看起来真的很小或者是一个明显的错误,我几天前才开始尝试学习python。

2 个答案:

答案 0 :(得分:0)

是的,这是坏线。您使用[1:n]所做的事情称为切片,与提出范围完全无关。请改用range功能:

range(1, n+1)

(注意n+1。范围不包括结束号。)

您也没有正确接受输入。 raw_input给出一个字符串,你想要一个int,所以这样做:

n = int(raw_input("Input number to generate permutation list"))

答案 1 :(得分:0)

在提及有关permutations的Python文档时(您应该将其作为如何使用模块函数的主要参考):

  

itertools.permutations(iterable [,r])

     

返回迭代中元素的连续r长度排列。

     

如果未指定r或为None,则r默认为长度   可迭代且生成所有可能的全长排列。

现在在你的代码中,你没有将正确的参数传递给permutations函数,[1:n]是一个切片,即使它不完整,它应该是一些列表的切片,例如:

l = range(4)
print l[1:4] #Slice of list l

另一方面,当你使用raw_input读取用户输入时,你必须将它转换为整数,如果这是你对用户的期望,或者只使用input将直接返回给你的整数值用户输入。

最后,如果您想要[1,n + 1]范围内的整数列表,请使用range函数,这样:range(1,n+1)

所以修复就像:

from itertools import permutations
from math import factorial

n = int(raw_input("Input number to generate permutation list"))
#or n = input("Input number to generate permutation list")

factorial_func = factorial(n)

print "there are %s permutations as follows:" %(factorial_func)

print list(permutations(range(1,n+1))