遍历列表列表的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遍历列表列表的问题相关的知识,希望对你有一定的参考价值。
我正在尝试计算矩阵的转置,它以列表列表的形式存在。初始矩阵为m n,我创建了矩阵n m。当我开始使用嵌套循环时,就会出现问题。
m = 0
for i in range(0, rows):
for j in range(0, columns):
final1[j][i] = m
print(final1)
m += 1
我刻意打印整个列表(最终),以查看我的值在每一步如何变化,为了简化起见,我也只分配了相应的自然数。我看到的是(输出的前4行)
[[0, None, None, None], [0, None, None, None], [0, None, None, None]]
[[1, None, None, None], [1, None, None, None], [1, None, None, None]]
[[2, None, None, None], [2, None, None, None], [2, None, None, None]]
[[2, 3, None, None], [2, 3, None, None], [2, 3, None, None]]
因此,通过访问final [j] [i],在位置j = 0,i = 0处,值final [1] [0]和final [2] [0]也在改变。如何避免这种情况?并制作此格式的前4行:
[[0, None, None, None], [None, None, None, None], [None, None, None, None]]
[[0, None, None, None], [1, None, None, None], [None, None, None, None]]
[[0, None, None, None], [1, None, None, None], [2, None, None, None]]
[[0, 3, None, None], [1, None, None, None], [2, None, None, None]]
rows = int(input())
columns = int(input())
final1 = [[None] * rows] * columns
这是我声明final1的方式
答案
此作品:
rows = int(input())
columns = int(input())
final1 = [[None for i in range(rows)] for j in range(columns)]
m = 0
for i in range(rows):
for j in range(columns):
final1[j][i] = m
m += 1
print(final1)
另一答案
之所以会这样,是因为声明语句在内部等效于将单个列表([None]*rows)
column
附加到final1
列表中。
如果您熟悉copy problem,这几乎是相同的。就它们代表的内存而言,final1
中的所有列表都是相同的列表。
这就是为什么当您在一个列表中更新值时,它会反映到所有人。
注意:您实际上是在创建具有column
个行数和row
个列数的列表的列表。
您可以通过]解决此问题>
以上是关于遍历列表列表的问题的主要内容,如果未能解决你的问题,请参考以下文章
片段 A 的列表视图中的片段 B 中的新列表视图,单击 A 的列表项