在Python中创建一个没有引用的列表的列表

9 浏览
0 Comments

在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只作为第一个列表的第一个元素。我该如何做到这一点?

0
0 Comments

问题的出现原因是希望创建一个没有引用关系的列表嵌套列表。解决方法是使用列表推导式来创建这样的列表。具体的代码如下:test = [[None] * 3 for _ in range(3)],其中的_只是一个惯例,表示不关心输出的结果,即0、1和2。

列表推导式是使用一行代码来生成列表的方法,避免了使用for循环的繁琐。但是需要注意的是,使用_代替一个变量并不会保存该数字的值,它只是为了提高代码的可读性。将_作为迭代变量,传递给range(3)函数,让其他程序员知道我们只是希望遍历range(3)的结果,而不关心具体的元素值。

虽然可以通过for _ in lst: print _来正常工作,但是使用_作为迭代变量会让同事们感到困惑,因为我们明确地告诉解释器“嘿,遍历lst,但是我们不会使用每个元素 - 哦,等等,让我们仍然使用那个元素”。

0