代码之家  ›  专栏  ›  技术社区  ›  Siddharth Chabra

itertools.permutations是否总是返回已排序的对象?

  •  0
  • Siddharth Chabra  · 技术社区  · 7 年前

    我的问题需要我迭代一个非常大的排列10!(或更大)排列: a = itertools.permutation(range(10))

    我的输入范围将始终是形式范围(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将尝试分配大量的内存,我希望避免这些内存。对于EG

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

    输出 232

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

    输出
    3215232

    如果这不是一个保证,还有什么选择?

    2 回复  |  直到 7 年前
        1
  •  1
  •   titiree    7 年前

    从文档中:

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

    所以你的问题的答案是肯定的 range(x) 排列将按词典顺序排序。

        2
  •  4
  •   R. S. Nikhil Krishna    7 年前

    the official documentation 我们可以看到,如果输入被排序,它确实会返回字典排序的排列。 range(x) 是的),而且也是一个iterable,因此不必担心内存分配作为一个列表

    排列以字典排序顺序发射。所以,如果输入 iterable被排序,排列元组将在sorted中生成 命令。

    推荐文章