在Python整数列表中排序子列表
我有一个没有排序的整数列表,存储在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])