在追加之前我真的需要 list.copy() 一个列表吗?

Do I really need to list.copy() a list before append?

我有两个列表,

list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]

如果我想合并它们并用list2.sort()排列它们,我可以只使用list2.extend(list1)吗?

或者我需要在扩展前复制一份吗?[=​​16=]

list3 = list1.copy()
list3.extend(list2)

为什么我的列表没有排序

list3 = []
list3.append(list1 + list2)
list3.sort()
print(list3)

这取决于您需要做什么。如果你不打算在你的程序的其他地方使用list2的原始内容(在合并和排序之前),那么你不需要复制。

首先,您需要记住哪些函数 return 是一个列表,哪些 modify/mutate 是调用函数的列表。这是一个摘要:

  • extendappendsort 改变了一个列表,但 sorted return 是一个新列表。

所以是的,您可以用一个列表扩展另一个列表,然后按照您所做的那样对其进行排序。您不需要制作副本(除非您出于某种原因确实需要)。

当与列表一起使用时,

+extend 的作用相同。不幸的是,list3.append(list1 + list2) 并没有按照您的想法去做,append 用于将单个项目添加到列表的末尾,您需要使用 +extend 如果你想像以前一样将一个列表添加到另一个列表,例如new_list = list1 + list2 + list3。然后就可以排序打印了。

回答你最后一个问题:

list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
list3 = []
list3.append(list1 + list2)

这会在列表中附加一个列表。如果你 print(list3) 你得到 [[91, 95, 97, 99, 92, 93, 96, 98]]

.sort() 方法尝试对外部列表进行排序,其中只有 1 个元素,无法进一步排序。要对您需要做的列表进行排序, list3[0].sort() 现在打印 list3 给你, '打印(列表 3)`

[[91, 92, 93, 95, 96, 97, 98, 99]]