我的问题要求我遍历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
如果这不能保证,还有什么选择?
答案 0 :(得分:4)
从the official documentation中,我们可以看到,如果输入被排序(range(x)
是)并且也是可迭代的,那么它确实会返回按字典顺序排序的排列,因此您不必担心内存分配作为列表
排列以字典顺序排序。所以,如果输入 可迭代排序,排列后的元组将被排序 订单。
答案 1 :(得分:1)
从文档中
排列以字典顺序排序。因此,如果输入的iterable是> sorted,则排列元组将按sorted顺序生成。
因此,您的问题的答案是肯定的,对于range(x)
之类的输入,排列将按字典顺序进行排序。