当前位置: 首页 > 面试题库 >

Python:清单清单

商正浩
2023-03-14
问题内容

运行代码

listoflists = []
list = []
for i in range(0,10):
    list.append(i)
    if len(list)>3:
        list.remove(list[0])
        listoflists.append((list, list[0]))
print listoflists

退货

[([7, 8, 9], 0), ([7, 8, 9], 0), ([7, 8, 9], 0), ([7, 8, 9], 1), ([7, 8, 9], 2), ([7, 8, 9], 3), ([7, 8, 9], 4), ([7, 8, 9], 5), ([7, 8, 9], 6), ([7, 8, 9], 7)]

因此,每次在列表列表中每次更新元组(列表)的第一个参数,但第二个参数list [0]却没有更新。有人可以解释这里发生的事情并提出解决方法吗?我想输出

[([0],0), ([0,1],0), ...

问题答案:

列表是可变类型-为了创建副本(而不只是传递相同的列表),您需要明确地这样做:

listoflists.append((list[:], list[0]))

但是,list已经是Python内置的名称-最好不要将该名称用作变量。这是一个不用list变量名并复制的版本:

listoflists = []
a_list = []
for i in range(0,10):
    a_list.append(i)
    if len(a_list)>3:
        a_list.remove(a_list[0])
        listoflists.append((list(a_list), a_list[0]))
print listoflists

请注意,我演示了两种不同的方法来复制上面的列表:[:]list()

首先[:]是创建一个 切片 (通常通常用于获取列表的一部分),该 切片 恰好包含整个列表,因此实际上是列表的副本。

第二个list()使用实际的list 类型构造函数
创建一个新列表,该列表的内容等于第一个列表。(在第一个示例中我没有使用它,因为您在代码中覆盖了该名称-这是为什么您不想这样做的一个很好的例子!)



 类似资料:
  • 问题内容: 我是Java的新手,我需要列出列表列表。我可以在python中做到这一点,因为列表的元素可以是列表,因此在嵌入式列表中将引用列表,并且将引用嵌入式列表的zeroeth元素。有什么简单的方法可以在Java中实现此行为? 问题答案: 所有其他答案在技术上都是正确的,但是恕我直言,如果您实施了粗略的列表列表,您将无法在正确的抽象级别上处理数据。例如,我很确定列表列表在您的业务领域中已经意味着

  • 问题内容: 有人告诉我。那么为什么这段代码会 代替 这是同一件事,所以两种方法都没关系吗? 问题答案: 返回的浅表副本,它等效于。 如果您想要列表的浅表副本,请使用,它有时还用于从迭代器获取所有值。 和之间的区别: 浅拷贝: 深度复制: 请注意,如果包含可变对象,则仅或不足: 但是内部对象仍然是x中对象的引用: 由于外部列表不同,因此修改x不会影响y,反之亦然 为了处理这个使用。

  • 问题内容: 我基本上是在寻找组合的 python版本 给定一个列表列表,我需要一个新列表,该列表给出列表之间所有可能的项目组合。 列表的数量是未知的,因此我需要一些适用于所有情况的列表。奖励积分,尽享优雅! 问题答案: 你需要:

  • 问题内容: 如何合并列表列表? 进入 如果我可以在合并列表之前在每个项目的开头和结尾添加一个值(例如html标签),那就更好了。 即,最终结果将是: 问题答案: 要串联列表,可以使用 要添加HTML标签,您可以使用列表推导。

  • 问题内容: 我有一个关于泛型的Java问题。我声明了一个通用列表: 然后以某种方法尝试实例化并将项目添加到该列表: 哪里只是类型的对象; 它不会编译。它说: List 不适用于参数(MyType) 任何想法? 问题答案: 您不能对extends进行“放置”。看一下泛型- 获取和放置规则 。

  • 问题内容: 我可以 但是,当我这样做 我在这里想念什么? 问题答案: 问题是,不接受as参数,它必须是单独的参数。 在这里,“ splat”运算符开始起作用… 我可以