为什么当列表的切片排序时不打印 None

问题描述 投票:0回答:1

以下代码

   L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   print(L[2:8].sort(reverse=True))

打印

None
,而我希望它打印
L = [1, 2, 8, 7, 6, 5, 4, 3, 9, 10]

  1. 为什么会这样?

  2. 如果这不是对列表的一部分(切片)进行排序的方法,那么考虑到我需要在同一个列表中进行排序,而不是创建另一个列表,那么什么是?

python sorting slice
1个回答
0
投票
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
L[2:8] = sorted(L[2:8], reverse=True)
print(L)

输出:

[1, 2, 8, 7, 6, 5, 4, 3, 9, 10]

这应该可以解决问题

这是有效的,因为当

L[2:8].sort(reverse=True)
时,它会尝试以相反的顺序对切片
[3, 4, 5, 6, 7, 8]
进行排序。但由于
sort()
更改了此处无法更改的原始内容,并且
None
被返回。

但是

sorted()
不影响原来的列表,需要手动分配位置。

© www.soinside.com 2019 - 2024. All rights reserved.