遍历列表列表的问题

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 的列表项

架构丰富的代码片段也应该用于产品列表吗?

Visual Studio 自定义代码片段在方法定义的参数列表中不起作用

Android,从其他片段返回的空列表视图

13 个非常有用的 Python 代码片段