Thi*_*MAL 2 python permutation python-itertools
我有一个列表,想生成没有重复元素的有限数量的排列。
itertools.permutations(x)
Run Code Online (Sandbox Code Playgroud)
给出所有可能的排序,但我只需要特定数量的排列。(我的初始列表包含〜200个元素=> 200!将花费不合理的时间,我不需要所有这些元素)
到目前为止我做了什么
def createList(My_List):
New_List = random.sample(My_List, len(My_List))
return New_List
def createManyList(Nb_of_Lists):
list_of_list = []
for i in range(0, Nb_of_Lists):
list_of_list.append(createList())
return list_of_list
Run Code Online (Sandbox Code Playgroud)
它正在运行,但是我的List_of_list将没有唯一的排列,或者至少我对此没有任何保证。
有没有办法做到这一点?谢谢
只需使用islice,就可以从一个可迭代对象中获取许多元素:
from itertools import permutations, islice
n_elements = 1000
list(islice(permutations(x), 0, 1000))
Run Code Online (Sandbox Code Playgroud)
这将返回list(第一个)1000个排列中的一个。
之所以起作用,是因为它permutations返回一个迭代器,该迭代器是一个生成需要立即返回而不是立即返回值的对象。因此,该过程如下所示:
list为)要求从中获取下一个值isliceislice检查是否返回了1000个值;如果没有,它将要求从中获取下一个值permutationspermutations 按顺序返回下一个值因此,永远不需要生成排列的完整列表。我们只取想要的数量。
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |