Python修改和编辑列表

2024-06-28 15:50:30 发布

您现在位置: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颠倒):

['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)分配给一个变量并将其用于索引插入,这两个输出之间会有差异

谢谢


Tags: 代码newitemslistsjanlistpeteralice
2条回答

第一个代码段


def combine_lists(list1, list2):
  new_list = list2
  index = len(list2)
  for items in list1:
      new_list.insert(index, items)
      print(new_list)
  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']
['Mike', 'Carol', 'Greg', 'Marcia', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Jan', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Peter', 'Jan', 'Bobby', 'Cindy', 'Alice']
['Mike', 'Carol', 'Greg', 'Marcia', 'Peter', 'Jan', 'Bobby', 'Cindy', 'Alice']

对于您的第一个代码,您将new_list.insert(index, items)在某个时间段( len(list2) )在同一位置插入每个新项。每次插入时,得到相同的索引,最后一个插入元素移到index+1位置,这就是为什么列表似乎是Jamies_list反向插入的

第二个代码段

由于您在每次for loop分配len(list2),因此它会动态地更新len并将新项目置于新项目的位置

这一行:

    new_list = list2

只需为list2列表创建一个新名称,但两个变量引用同一个列表

因此,在第一个示例中,使用index = len(list2)获得该列表的长度,然后在for循环的每次迭代中使用相同的index

在第二个示例中,每次迭代都会得到len(list2),但是由于您正在修改new_list,因此您也在修改list2,并且它的长度会随着您的进行而增加

如果需要列表的副本,请使用list(new_list) = list2new_list = list2.copy()创建副本

相关问题 更多 >