我刚刚开始学习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颠倒):
['Mike', 'Carol', 'Greg', 'Marcia', 'Peter', 'Jan', 'Bobby', 'Cindy', 'Alice']
第二个代码示例:
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))
但第二个代码输出:
['Mike', 'Carol', 'Greg', 'Marcia', 'Alice', 'Cindy', 'Bobby', 'Jan', 'Peter']
为什么仅仅通过将len(list2)分配给一个变量并将其用于索引插入,这两个输出之间会有差异
谢谢
第一个代码段
输出:
对于您的第一个代码,您将
new_list.insert(index, items)
在某个时间段( len(list2) )
在同一位置插入每个新项。每次插入时,得到相同的索引,最后一个插入元素移到index+1
位置,这就是为什么列表似乎是Jamies_list
反向插入的第二个代码段
由于您在每次
for loop
分配len(list2)
,因此它会动态地更新len
并将新项目置于新项目的位置这一行:
只需为
list2
列表创建一个新名称,但两个变量引用同一个列表因此,在第一个示例中,使用
index = len(list2)
获得该列表的长度,然后在for循环的每次迭代中使用相同的index
值在第二个示例中,每次迭代都会得到
len(list2)
,但是由于您正在修改new_list
,因此您也在修改list2
,并且它的长度会随着您的进行而增加如果需要列表的副本,请使用
list(new_list) = list2
或new_list = list2.copy()
创建副本相关问题 更多 >
编程相关推荐