Python itertools.permutations是否总是返回已排序的对象?
我的问题需要迭代一个非常大的10个排列!(或更大)置换:Python itertools.permutations是否总是返回已排序的对象?,python,itertools,Python,Itertools,我的问题需要迭代一个非常大的10个排列!(或更大)置换:a=itertools.permutation(范围(10)) 我的输入范围始终是形式范围(x),当我在a中迭代时,几乎所有情况下,排列都是按字典顺序排序的 即 等等。这总是保证吗? 我不想对它进行明确的排序 a=sorted(itertools.permutation(范围(10)) 因为这将把转换为,这意味着python将尝试分配大量内存,这是我想要避免的。例如 a = itertools.permutations([1,2,3,4,5
a=itertools.permutation(范围(10))
我的输入范围始终是形式范围(x),当我在a
中迭代时,几乎所有情况下,排列都是按字典顺序排序的
即
等等。这总是保证吗?
我不想对它进行明确的排序
a=sorted(itertools.permutation(范围(10))
因为这将把
转换为
,这意味着python将尝试分配大量内存,这是我想要避免的。例如
a = itertools.permutations([1,2,3,4,5,6,7,8,9])
sys.getsizeof(a)
输出
232
b = sorted(a)
sys.getsizeof(b)
输出3215232
b = sorted(a)
sys.getsizeof(b)
如果这不是一个保证,那么替代方案是什么?从中,我们可以看到,如果输入被排序(即范围(x)
是),并且作为一个iterable,它确实会返回按字典排序的排列,因此您不必担心作为列表的内存分配
排列按字典排序顺序发出。因此,如果输入
iterable排序后,排列元组将以排序方式生成
秩序
从中,我们可以看到,如果输入被排序(即range(x)
是),它确实会返回按字典顺序排序的排列,并且也是一个iterable,因此您不必担心作为列表的内存分配
排列按字典排序顺序发出。因此,如果输入
iterable排序后,排列元组将以排序方式生成
秩序
从文档中:
排列按字典排序顺序发出。因此,如果输入iterable为>排序,则排列元组将按排序顺序生成
因此,您的问题的答案是肯定的,对于像范围(x)
这样的输入,排列将按照字典顺序进行排序。来自文档:
排列按字典排序顺序发出。因此,如果输入iterable为>排序,则排列元组将按排序顺序生成
所以你的问题的答案是肯定的,对于像
range(x)
这样的输入,排列将按字典顺序排序。这可以通过运行一些代码来回答,不是吗<代码>列表(itertools.permutations(reversed(range(3)))我不希望输出是一个列表需要list()
来显示整个置换序列,因为置换返回一个惰性生成器。但列表不会改变顺序,这是文档中规定的确定顺序。我的问题是,如果输入排序,itertools.permutations是否保证结果排序?下面已经给出了答案,谢谢。这可以通过运行一些代码来解决,不是吗<代码>列表(itertools.permutations(reversed(range(3)))我不希望输出是一个列表需要list()
来显示整个置换序列,因为置换返回一个惰性生成器。但列表不会改变顺序,这是文档中规定的确定顺序。我的问题是,如果输入排序,itertools.permutations是否保证结果排序?下面已经回答了,谢谢