【问题标题】:insert n in list x --> append list x to list y --> delete n in list x在列表 x 中插入 n --> 将列表 x 附加到列表 y --> 在列表 x 中删除 n
【发布时间】:2021-12-15 17:57:32
【问题描述】:

我正在尝试使用 for 循环将数字“1”插入到列表中的每个位置,并最终在 python 中获取所有可能的列表。

例如:

l = ["2","3","6"]

数字 = “1”

输出 = [["1","2","3","6"],["2","1","3" ,"6"],["2","3","1","6"],["2","3","6","1" ]]

l = ["2","3","6"]
list_of_nrs = []
for index in range(len(l)+1):
    l.insert(index, "1")
    list_of_nrs.append(l)
    del l[index]
print(list_of_nrs)

所以我像上面的代码一样尝试过,但我得到的输出是:

[['2', '3', '6'], ['2', '3', '6'], ['2', '3', '6'], ['2', '3', '6']] 

append 和 del 函数之间好像有问题。

【问题讨论】:

    标签: python list insert append del


    【解决方案1】:

    当你追加输出列表时,你可以像 C 中的指针一样使用引用值。每当在任何地方改变它的值时,它都会改变整个程序。所以你必须创建新的列表值。你可以像这样使用:

    l = ["2","3","6"]
    list_of_nrs = []
    for index in range(len(l)+1):
       temp = list(l) # temp is a new list now, it wont refer to l anymore
       temp.insert(index, "1")
       list_of_nrs.append(temp)
    print(list_of_nrs)
    

    【讨论】:

      【解决方案2】:

      您的list_of_nrs 包含对您不断修改的同一个列表的四个引用;将其附加到列表不会创建它的副本!

      要创建副本,请使用.copy()

      l = ["2", "3", "6"]
      list_of_nrs = []
      for index in range(len(l)+1):
          l.insert(index, "1")
          list_of_nrs.append(l.copy())  # note the .copy()!
          del l[index]
      print(list_of_nrs)
      

      打印:

      [['1', '2', '3', '6'], ['2', '1', '3', '6'], ['2', '3', '1', '6'], ['2', '3', '6', '1']]
      

      以上是对您的原始代码进行最小更改的修复;对于另一种方法,您可以通过在不同点对原始列表进行切片来构建新列表:

      l = ["2", "3", "6"]
      list_of_nrs = [
          l[:i] + ["1"] + l[i:]
          for i in range(len(l)+1)
      ]
      print(list_of_nrs)
      

      【讨论】:

      • 为什么不复制列表,然后插入而不是插入/删除,考虑到从列表中删除必须重新移动所有元素?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2023-03-31
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多