2015-06-19 122 views
0

所以我开始学习python和思考练习,我会尝试写一个小脚本来看看我是否可以。事实证明,我无法做到恰到好处,并且会离开它,但有点决心,现在对这个特定功能有了一种仇恨。Python中长度为n的列表的排列

我想要获取代码以获取给定数字的原始输入,并从中生成所有可能的数字列表。例如。如果输入是“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的列表,就像你可以用list_name [a:b]访问a到b列表中的一部分一样,但是似乎情况并非如此)

对不起,如果这看起来很微不足道或者是一个明显的错误,我只是在几天前才开始学习python。

+1

'[1:n]'自己是一个语法错误。你必须做更多的研究,探讨传递给“排列”的论据。 – TigerhawkT3

回答

0

是的,这是坏的路线。你在做什么[1:n]被称为切片,并与提出范围完全无关。使用range函数:

range(1, n+1) 

(注意n+1范围是不包括年底数)。

您还没有正确地输入。 raw_input给一个字符串,你想一个int这样做:

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

谢谢 我在我的代码中尝试过这些东西,它在这个 –

+0

@AFry很好的工作,你甚至不需要',n'作为排列组合。它在默认情况下执行列表的长度。 – Maltysen

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))