为何列表切片调用sort方法输出None?如何原地排序列表切片?
列表切片排序问题解答
1. 输出None的原因
- 列表的
sort()方法是原地修改型方法:它会直接修改调用它的列表,但不会返回排序后的列表,默认返回None。 L[2:8]是切片操作,会生成一个独立于原列表的临时子列表。你对这个临时子列表调用sort(),虽然子列表内部被排序了,但sort()返回的None被print输出。- 这个临时子列表在代码执行结束后就会被回收,原列表
L完全没有被修改。
2. 在原列表中完成指定切片的逆序排序
以下两种方法都可以实现需求:
方法一:用sorted()生成排序后的新列表再赋值
sorted()函数会返回一个新的排序后的列表,不会修改原对象,适合直接切片赋值:
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]
方法二:先处理子列表再赋值回原列表
先提取切片生成子列表,用sort()原地排序后,再把排序后的子列表赋值回原列表的对应位置:
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] sub_slice = L[2:8] sub_slice.sort(reverse=True) L[2:8] = sub_slice print(L) # 输出: [1, 2, 8, 7, 6, 5, 4, 3, 9, 10]
内容的提问来源于stack exchange,提问作者alekscooper
相关产品推荐
相关产品推荐

