在Python的整数列表中对子列表进行排序

siz*_*erz 10 python

我在Python列表中有一个未排序的整数列表.我想在完整列表的子集中排序元素,而不是完整列表本身.我还希望对列表进行排序,以便不创建新列表(我经常这样做).我最初尝试过

p[i:j].sort()
Run Code Online (Sandbox Code Playgroud)

但这并没有改变p的内容,大概是因为新的列表形成,排序,然后扔掉而不影响原始列表的内容.当然,我可以创建自己的排序函数并使用循环来选择适当的元素,但这不会感觉到pythonic.是否有更好的方法对子列表进行排序?

Joc*_*zel 17

你可以写 p[i:j] = sorted(p[i:j])

  • 仍然不是操作员想要的,而是我要建议的。它仍然需要创建一个单独的子数组并在将其分配给“p[i:j]”之前对其进行排序。一段时间以来,我一直认为 sort() 中应该有一个选项来指定排序范围。这将消除不必要的内存使用。 (2认同)
  • @sizzzzlerz:"不断分配和释放临时内存"这在Python中没有多少开销.直到你可以证明这实际上**是**的瓶颈,不要过早地优化.实际上,创建需要对子列表进行排序的列表可能表示创建列表的算法选择较差.实际上,当存在子列表时,列表可能是不合适的 - 您可能想要考虑使用某种树来避免所有排序. (2认同)