在Python整数列表中排序子列表

17 投票
3 回答
18647 浏览
提问于 2025-04-16 03:51

我有一个没有排序的整数列表,存储在Python的一个列表里。我想对这个列表中的一部分元素进行排序,而不是对整个列表进行排序。而且,我希望在原地进行排序,也就是说不想创建新的列表(因为我需要这样做的频率很高)。我最开始尝试了

p[i:j].sort()

但是这并没有改变列表p的内容,可能是因为创建了一个新的列表,进行了排序,然后又被丢弃了,原来的列表内容没有受到影响。当然,我可以自己写一个排序函数,用循环来选择合适的元素,但这样做感觉不太符合Python的风格。有没有更好的方法可以在原地对子列表进行排序呢?

3 个回答

-6

"就地"这个说法其实没什么特别的意思。你需要的是这个。

p[i:j] = list( sorted( p[i:j] ) ) 
0

这是因为 p[i:j] 会返回一个新的列表。我想到一个直接的解决办法:

l = p[i:j]
l.sort()
a = 0
for x in range(i, j):
    p[x] = l[a]
    a += 1
29

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

,意思是把列表p中从第i个到第j个的部分进行排序,然后再把排序后的结果放回原来的位置。

撰写回答