在Python中创建一个没有引用的列表的列表
在Python中创建一个没有引用的列表的列表
我正在尝试以一种高效的方式创建一个列表的列表,但是我无法想出任何避免引用的方法。到目前为止,我尝试过以下方法,但显然都没有成功:
>>> test=[[None]*3][:]*3 >>> test [[None, None, None], [None, None, None], [None, None, None]] >>> test[0][0]=0 >>> test [[0, None, None], [0, None, None], [0, None, None]] >>>
这不是我想要发生的。我想要的是0只作为第一个列表的第一个元素。我该如何做到这一点?
问题的出现原因是希望创建一个没有引用关系的列表嵌套列表。解决方法是使用列表推导式来创建这样的列表。具体的代码如下:test = [[None] * 3 for _ in range(3)]
,其中的_
只是一个惯例,表示不关心输出的结果,即0、1和2。
列表推导式是使用一行代码来生成列表的方法,避免了使用for循环的繁琐。但是需要注意的是,使用_
代替一个变量并不会保存该数字的值,它只是为了提高代码的可读性。将_
作为迭代变量,传递给range(3)
函数,让其他程序员知道我们只是希望遍历range(3)
的结果,而不关心具体的元素值。
虽然可以通过for _ in lst: print _
来正常工作,但是使用_
作为迭代变量会让同事们感到困惑,因为我们明确地告诉解释器“嘿,遍历lst
,但是我们不会使用每个元素 - 哦,等等,让我们仍然使用那个元素”。