我想访问一些固定的样本来排列一个长列表。显然我可以:
In [18]: import itertools
In [19]: l = [p for p in itertools.permutations(range(10))]
In [20]: len(l)
Out[20]: 3628800
In [21]: l[256766]
Out[21]: (0, 7, 3, 9, 5, 6, 4, 2, 1, 8)
但这会导致长列表l
为列表创建而求值。10个项目清单仍然可行。为更大的列表挂起。在
有没有一种方法可以在不创建完整列表的情况下通过调用其编号来获得特定的排列?在
请注意,我不想访问随机洗牌。我希望它是相同的排列,最好是“置换号”匹配使用时调用的列表位置itertools.排列. 在
编辑:回复:复制。也欢迎回答与itertools模块相关的问题(见下面的讨论)。{rtools在上下文中可能仍然值得讨论。在
您可以使用
itertools.islice()
:注意,这将部分耗尽迭代器。这意味着您不能在同一个迭代器上多次执行该操作。在
您也可以创建自己的类,这样它就可以记住已经生成了哪些值。这样,可以在同一对象上找到多个索引:
^{pr2}$这并不难:
这里的想法是,列表}排列。在
l
的第n
排列从第n // factorial(len(l) - 1)
项开始,并继续l
的其余元素的第{如果你测试它,你会发现它确实有效:
^{pr2}$对于迭代
itertools.permutations
永远无法完成的输入,它的工作速度足够快:相关问题 更多 >
编程相关推荐