所以我开始学习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。
答案 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))