【发布时间】:2018-12-11 02:46:50
【问题描述】:
假设我有一个列表:[1, 2, 3]
这样一个列表的排列将是 [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2] , 和 [3, 2, 1]
(Group 1) 但是,假设我们看一下排列 [1, 2, 3]。如果我们将它移一位,我们得到 [3, 1, 2]。再次执行此操作,我们得到 [2, 3, 1]。
(Group 2) 如果我们查看排列 [1, 3, 2] 并将其移一位,我们得到 [2, 1, 3]。再多一个,我们得到 [3, 2, 1]。
这两个排列组构成了列表的排列。
我的问题是,是否可以利用它来制作比来自 itertools 的排列更快的排列生成器。
我不介意我为每个组获得哪种列表排列,但我想减少生成排列所花费的时间。
(注意:我知道如果列表只有三个项目,这将没有用,但列表可以是各种大小,例如 25 或 100)。
【问题讨论】:
-
您可以随时尝试并为每种方法计时,但我敢打赌,六包您不会做出明显更快的方法。从根本上说,它必须做几乎相同数量的工作,你只是改变它创建它们的顺序。
-
生成两组三人组所花费的时间与生成一组六人组所花费的时间相同。代码可能更简单,但速度并不明显。
-
@CoryKramer 我知道三人一组的速度不会那么快,但我打算将它用于各种列表大小。我会将这些信息添加到我的问题中。
-
正如@CoryKramer 已经指出的那样,您可能不会比python 内置实现快得多。但是,可能还有其他方法可以优化程序的执行时间。你能给我们更多的背景信息吗?你最终想要达到什么目的?你用这些排列做什么?
-
@chepner 更清楚地说,我并不是要生成给定的组。我想从每个组中生成任何一个给定的项目。所以,我正在寻找排列,但不认为移动了 n 次的列表与移动了 m 次的列表有任何不同。
标签: python permutation