【问题标题】:Permutations of a list of length n in pythonpython中长度为n的列表的排列
【发布时间】:2015-06-20 09:43:19
【问题描述】:

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

由于 [1:n] 部分,我知道错误行是第 10 行,我不知道如何让它从 1 到 n 列出并将其放入置换函数中。 (我希望通过 [1:n] 它会生成一个从 1 到 n 的列表,就像您可以使用它通过 list_name[a:b] 访问从 a 到 b 的列表的一部分但似乎不是这样)

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

【问题讨论】:

  • [1:n] 本身就是一个语法错误。您必须对传递给permutations 的参数进行更多研究。

标签: python permutation


【解决方案1】:

是的,那是坏线。您对[1:n] 所做的操作称为切片,与提出范围完全无关。请改用range 函数:

range(1, n+1)

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

您也没有正确接受输入。 raw_input 给一个字符串,而你想要一个 int 的话:

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

【讨论】:

  • 感谢我在我的代码中尝试了这些东西,并且效果很好
  • @AFry 你甚至不需要,n 来进行排列。默认情况下它会执行列表的长度。
【解决方案2】:

参考有关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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多