Python修改和编辑列表
我刚刚开始学习python,我正在尝试一些代码,我想问一下为什么以下两个代码的功能不同?
第一个代码示例:
def combine_lists(list1, list2):
new_list = list2
index = len(list2)
for items in list1:
new_list.insert(index, items)
return(new_list)
Jamies_list = ["Alice", "Cindy", "Bobby", "Jan", "Peter"]
Drews_list = ["Mike", "Carol", "Greg", "Marcia"]
print(combine_lists(Jamies_list, Drews_list))
第一个代码的输出是正确的(我希望将列表 1 反转):
[“迈克”、“卡罗尔”、“格雷格”、“玛西亚”、“彼得”、“简”、“鲍比”、“辛迪”、“爱丽丝”]
第二个代码示例:
def combine_lists(list1, list2):
new_list = list2
for items in list1:
new_list.insert(len(list2), items)
return(new_list)
Jamies_list = ["Alice", "Cindy", "Bobby", "Jan", "Peter"]
Drews_list = ["Mike", "Carol", "Greg", "Marcia"]
print(combine_lists(Jamies_list, Drews_list))
但是第二个代码输出:
[“迈克”、“卡罗尔”、“格雷格”、“玛西亚”、“爱丽丝”、“辛迪”、“鲍比”、“简”、“彼得”]
为什么仅通过将 len(list2) 分配给变量并将其用于索引插入而在这两个输出中存在差异?
谢谢!
回答
这一行:
new_list = list2
只需为list2列表创建一个新名称,但两个变量都引用同一个列表。
因此,在第一个示例中,您获得该列表的长度,index = len(list2)然后index通过 for 循环在每次迭代中使用相同的值。
在第二个示例中,len(list2)每次迭代都会得到,但是由于您正在修改new_list,因此您也在修改list2并且它的长度会随着您的进行而增加。
如果您需要该列表的副本,请使用list(new_list) = list2或创建一个副本new_list = list2.copy()