运行代码
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)的第一个参数每次都在列表中更新,但是第二个参数list[0]没有更新。有人能解释一下这是怎么回事并提出解决办法吗?我想输出
[([0],0), ([0,1],0), ...
首先,我强烈建议您将变量
list
重命名为其他变量。list
是内置列表构造函数的名称,您正在隐藏其正常函数。我将在下面将list
重命名为a
。Python名称是绑定到对象的引用。这意味着,除非您创建多个列表,否则每当您使用
a
时,它引用的实际列表对象与上次相同。所以当你打电话您可以稍后更改
a
,它将更改元组的第一个元素指向的内容。这不会在a[0]
中发生,因为a[0]
指向的对象(它是一个整数)不会更改(尽管a[0]
在代码运行期间指向不同的对象)。您可以使用
list
构造函数创建整个列表的副本:或者,您可以使用切片符号进行复制:
我来这里是因为我是python新手,而且很懒,所以我在搜索一个示例来创建一个包含两个列表的列表,过了一会儿我意识到这里的主题可能是错误的。。。 这是创建列表列表的代码:
这是输出 [ [(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9)], [(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9)] ]
代码的问题似乎是您正在用列表创建一个元组,并获得对列表的引用而不是副本。我想应该属于元组主题。。。
列表是一种可变类型-为了创建副本(而不仅仅是传递相同的列表),您需要显式地执行以下操作:
但是,
list
已经是Python内置的名称了-最好不要将该名称用于变量。下面是一个版本,它不使用list
作为变量名,并生成一个副本:注意,我演示了两种复制上面列表的方法:
[:]
和list()
。第一个,
[:]
是创建一个片(通常用于获取列表的一部分),它恰好包含整个列表,因此实际上是列表的副本。第二个是
list()
,它使用实际的list
类型构造函数创建一个新列表,其中的内容与第一个列表相等。(我没有在第一个示例中使用它,因为您在代码中重写了该名称—这是一个很好的示例,说明了为什么您不想这样做!)相关问题 更多 >
编程相关推荐