如何在不保存迭代的最后一个值的情况下替换Python嵌套列表中的值

Yuna Luzi

我正在尝试在列表的第i个列表上添加/替换一个i元素,但是,仅保存了最后一次迭代。很高兴了解为什么会发生这种情况以及解决方法。我对看起来像这样的输出感兴趣:[[[0], [], [], []], [[1], [], [], []], [[2], [], [], []], [[3], [], [], []]]但我却得到了:[[[3], [], [], []], [[3], [], [], []], [[3], [], [], []], [[3], [], [], []]]

matrix = [ [ [] * 4] * 4] * 4
print('pre_matrix=',matrix)
for m in range(len(a) + 1):
    matrix[m][0] = [m]
    print('m={}, matrix[m]={}'.format(m, matrix[m]))
print('post_matrix=', matrix)

# This is what the response looks like:
# pre_matrix= [[[], [], [], []], 
# [[], [], [], []], 
# [[], [], [], []], 
# [[], [], [], []]]
#
# m=0, matrix[m]=[[0], [], [], []]
# m=1, matrix[m]=[[1], [], [], []]
# m=2, matrix[m]=[[2], [], [], []]
# m=3, matrix[m]=[[3], [], [], []]
#
# post_matrix= [[[3], [], [], []], 
# [[3], [], [], []], 
# [[3], [], [], []], 
# [[3], [], [], []]]
iz_

当您执行以下操作时:

matrix = [ [ [] * 4] * 4] * 4

实际上,您并不是每次乘法都创建新列表。相反,您正在创建对同一基础列表的许多引用。当我们简化示例时可以看到:

matrix = [[0, 0, 0]] * 3 # <- Wrong!
matrix[0][0] = 1
print(matrix)
# [[1, 0, 0], [1, 0, 0], [1, 0, 0]]

要解决此问题,请使用列表推导每次正确创建一个新列表:

matrix = [[[] for _ in range(4)] for _ in range(4)]

在您的代码中(替换len(a) + 14):

matrix = [[[] for _ in range(4)] for _ in range(4)]
print('pre_matrix=',matrix)
for m in range(4):
    matrix[m][0] = [m]
    print('m={}, matrix[m]={}'.format(m, matrix[m]))
print('post_matrix=', matrix)

输出:

pre_matrix= [[[], [], [], []], [[], [], [], []], [[], [], [], []], [[], [], [], []]]
m=0, matrix[m]=[[0], [], [], []]
m=1, matrix[m]=[[1], [], [], []]
m=2, matrix[m]=[[2], [], [], []]
m=3, matrix[m]=[[3], [], [], []]
post_matrix= [[[0], [], [], []], [[1], [], [], []], [[2], [], [], []], [[3], [], [], []]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:如何在不删除重复项的情况下将一个数据帧中的列值替换为另一个

如何在不删除行的情况下保留熊猫的最后一个值

如何在不替换Golang中前一行的情况下将最后一个sql行追加到列表中

每次出现的情况下,将OCaml列表中的某个值替换为另一个值

在不使用列表的情况下获取最后一个字母值

如何在不重新计算的情况下从类中的方法获取一个值?

在Python中,如何在不循环的情况下从另一个矩阵的值中分配一个稀疏矩阵的值?

如何在不包含最后一个值(sql)的情况下计算平均值?

如何在不重新运行函数(python)的情况下将值从一个脚本中的函数传输到另一个脚本?

Python:列表迭代仅返回最后一个值

python-如何在python中的嵌套列表中删除一个值?

如何在不使用Python中使用sort()的情况下根据一个特定键的值对词典列表进行排序

根据列表的最后一个值和第一个值在 python 中附加嵌套列表

我如何在不使用long if else语句的情况下替换python字典中的值

如何在不使用嵌套的for循环的情况下迭代两个列表?

如何在不止一个JPA值的情况下使用mappingBy

如何在每组保持一个值不变的情况下循环多个组?

xpath如何在孩子的数量并不总是相同的情况下获取第一级孩子的最后一个值

如何在没有集合的情况下从列表中查询一个对象?

如何在Python分布中给定样本列表的情况下计算值的概率?

在不删除最后一个值的情况下使用popd

python - 如何在没有清除数据的情况下在python中添加一个值

如何在不弄乱第一个表中的值总数的情况下对联接表中的值求和?

如何在不枚举每个值的情况下从Ruby数组中选择第一个递增的值?

在某些情况下,如何根据不同的数据框列替换一个数据框的列值?

如何在不保存对数组的引用的情况下创建具有某些数组值的对象?

在另一个变量的情况下,用R data.table替换多列中的值

如何在不使用索引和切片的情况下访问嵌套列表中的值?

在不破坏括号格式的情况下删除列表中的最后一个元素(括号)