列表python的有限排列

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将没有唯一的排列,或者至少我对此没有任何保证。

有没有办法做到这一点?谢谢

gmd*_*mds 5

只需使用islice,就可以从一个可迭代对象中获取许多元素:

from itertools import permutations, islice

n_elements = 1000

list(islice(permutations(x), 0, 1000))
Run Code Online (Sandbox Code Playgroud)

这将返回list(第一个)1000个排列中的一个。

之所以起作用,是因为它permutations返回一个迭代器,该迭代器是一个生成需要立即返回而不是立即返回值的对象。因此,该过程如下所示:

  1. 调用函数(在这种情况下list为)要求从中获取下一个值islice
  2. islice检查是否返回了1000个值;如果没有,它将要求从中获取下一个值permutations
  3. permutations 按顺序返回下一个值

因此,永远不需要生成排列的完整列表。我们只取想要的数量。