itertools.permutations会始终返回已排序的对象吗?

时间:2018-07-08 17:40:11

标签: python itertools

我的问题要求我遍历10个很大的排列! (或更大)排列:a = itertools.permutation(range(10))

我的输入范围将始终是range(x)形式,尽管在几乎所有情况下,当我遍历a时,排列都是按字典顺序排序的 即

a[0] = (0,1,2,3,4,5,6,7,8,9)
a[1] = (0,1,2,3,4,5,6,7,9,8)

,依此类推。这总是保证吗? 我不想明确地对其进行排序 a = sorted(itertools.permutation(range(10)))

因为这会将<class 'itertools.permutations'>转换为<class 'list'>,这意味着python将尝试分配大量内存,而我想避免这种情况。例如

a = itertools.permutations([1,2,3,4,5,6,7,8,9])
sys.getsizeof(a)

输出     232

b = sorted(a)
sys.getsizeof(b)

输出
    3215232

如果这不能保证,还有什么选择?

2 个答案:

答案 0 :(得分:4)

the official documentation中,我们可以看到,如果输入被排序(range(x)是)并且也是可迭代的,那么它确实会返回按字典顺序排序的排列,因此您不必担心内存分配作为列表

  

排列以字典顺序排序。所以,如果输入   可迭代排序,排列后的元组将被排序   订单。

答案 1 :(得分:1)

从文档中

  

排列以字典顺序排序。因此,如果输入的iterable是> sorted,则排列元组将按sorted顺序生成。

因此,您的问题的答案是肯定的,对于range(x)之类的输入,排列将按字典顺序进行排序。