如何创建所有随机排序的数组

2024-04-16 08:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个数组来存储n个数字上所有可能的顺序。在Python3中有没有有效的方法来创建这样一个数组?你知道吗

例如,当n是20时,应该有20!此数组中的元素。你知道吗


Tags: 方法元素顺序数字数组python3
1条回答
网友
1楼 · 发布于 2024-04-16 08:26:09

有效的方法,也许,实用,不

生成内存中的列表是没有效率的,正如您所说的,您的列表将是20!个元素长的,每个元素是一个包含20个项目的列表。假设每个元素的最佳情况是1字节,并且没有开销,我们的数组将消耗20 x 20!字节的RAM,大约42 exabytes

@user8408080建议使用一个生成器,一个生成每个元素的函数,但一次只能生成一个元素,这样就可以在不必将整个列表存储在ram中的情况下对其进行处理,@njzk2建议使用itertools,permutations方法可能会做您想做的事情:

itertools.permutations([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])

或者更简单地说:

itertools.permutations(range(1,21))

下一个问题,这产生20!结果,一秒钟处理10,000,000可能是可行的(尽管你还没有指定要用这个列表做什么),因为它需要20! / 10^7秒,大约7000年。你知道吗

假设有一个更“有效”的方法,我们可以把这个数字降下来,但我认为它仍然不实用。你知道吗

import itertools

def process(l):
    #Do some processing
    return l

def iterate_permutations(n):
    for l in itertools.permutations(range(1,n+1)):
        process(l)

iterate_permutations(10)

你可能需要重新定义你的问题,或者优化它,这样你就不必依次处理所有可能的排列。根据问题的不同,可能会有一些数学或逻辑原理来帮助你。你知道吗

相关问题 更多 >