Python中对列表执行append/extend操作前是否需要先调用copy方法?
Python列表合并排序问题解答
问题1:合并排序是否需要拷贝原列表
- 如果你不需要保留
list1、list2的原始内容,可以直接执行list2.extend(list1)后调用list2.sort(),该操作合法有效,执行后list2就是合并排序后的结果。 - 如果你后续仍需使用两个原始列表的数据,就必须先做拷贝再操作,避免原始数据被修改。你示例中的写法:
就是不会修改原列表的安全写法,适合需要保留原始数据的场景。list3 = list1.copy() list3.extend(list2) list3.sort()
问题2:代码未完成排序的原因
你给出的代码:
list3 = [] list3.append(list1 + list2) list3.sort() print(list3)
问题出在append操作上:list1 + list2已经得到了合并后的一维列表[91, 95, 97, 99, 92, 93, 96, 98],但append会把这个列表整体作为单个元素塞进空列表list3,此时list3的实际结构是二维列表[[91, 95, 97, 99, 92, 93, 96, 98]],整个列表只有一个元素,调用sort()自然不会产生排序效果。
正确写法参考
两种常用实现方式:
- 直接用列表加法合并后排序
list3 = list1 + list2 list3.sort()
- 用extend方法逐个添加元素后排序
list3 = [] list3.extend(list1) list3.extend(list2) list3.sort()
内容的提问来源于stack exchange,提问作者user17011190
相关产品推荐
相关产品推荐

