运行代码
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作变量名并复制的版本:
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()使用实际的list 类型构造函数 创建一个新列表,该列表的内容等于第一个列表。(在第一个示例中我没有使用它,因为您在代码中覆盖了该名称-这是为什么您不想这样做的一个很好的例子!)