【问题标题】:Python unexpected (to me) behaviour when deleting lists删除列表时Python意外(对我而言)行为
【发布时间】:2015-12-15 16:08:33
【问题描述】:

遇到了一个让我有点困惑的编程问题。 我正在解析数据并:

  • 将每个相关块添加到 list1,将 list1 附加到 final_list。 (为了方便和整洁的未来演示)
  • 对于下一条相关信息,我将使用 *list1[:] = [] 删除 list1 中的“旧”信息
  • 将新的新鲜信息附加到 list1,将 list1 附加到 final_list 和瞧……我想:)

感谢所有帮助!

示例:

final_list=[]
list1 = [1,2,3,4]
list2 = [5,6,7,8]

final_list.append(list1)
final_list.append(list2)
print final_list

list1[:] = []
print final_list

示例输出

[[1, 2, 3, 4], [5, 6, 7, 8]]
[[], [5, 6, 7, 8]]

系统版本

Python: 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)]

【问题讨论】:

  • 您好,欢迎来到 StackOverflow。请花一些时间阅读帮助页面,尤其是名为"What topics can I ask about here?""What types of questions should I avoid asking?" 的部分。更重要的是,请阅读the Stack Overflow question checklist。您可能还想了解Minimal, Complete, and Verifiable Examples
  • 您预计会发生什么?
  • 我不知道为什么这会让你感到惊讶。你能解释一下你希望看到什么吗?
  • 嗨,我想要实现的本质上是创建一个列表列表。继续在循环中向 final_list 添加数据。
  • @Fredrik,您是否说某些事情与您预期的不一样,您应该说出您的预期或您感到困惑的事情。在这种情况下,我认为您会感到困惑的是 list1 在 final_list 中也发生了变化,对吧?无论如何,当您开始使用 python 时,这是一个非常常见的问题。 final_list 包含两个指向 list1 和 list2 的“标签”,指向你放在那里的任何东西。如果更改 list1 或 list2,final_list 也会相应更改

标签: python list append


【解决方案1】:

正如许多社区读者所指出的,final_list 中的对象只是指向原始对象“list1”和“list2”的指针。最后,我使用 final_list.append(list(list1)) 方法将 list1 的值存储在 final_list 中。 (作为副本)在此之后可以安全地重置 list1 并重复该过程。

【讨论】:

    【解决方案2】:

    通过调用list1[:] = [],您可以更改所有list1 的先前值,即使在final_list 中也是如此。要保留final_list 中的list1 值,您应该制作一个副本并附加副本而不是原始列表。列表复制的一些解释和不错的方法可以在here找到。

    【讨论】:

      【解决方案3】:

      我正在使用 *list1[:] = [] 删除 list1 中的“旧”信息

      因此,list1 将与您在 final_list 中引用的对象相同。

      final_list 就是[list1, list2]。因此输出。

      如果你想要一个新的对象,重新分配变量:

      list1 = []
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        相关资源
        最近更新 更多