我正沿着how to add a item in a list of list using python号航道进场

但当我固定列表列表的大小时,它似乎不起作用

lst=[[None]]*5

如果我做lst[0].append([0]),它会更新列表的所有索引

[[None, [0]], [None, [0]], [None, [0]], [None, [0]], [None, [0]]]

而不是 [[None, [0]], [None], [None], [None], [None]]

为何如此?如何确保只更新所需的索引?

推荐答案

要做到这一点,当指定的索引被更新时,您应该为外部列表中的每个位置创建单独的内部列表.

您可以使用列表理解来实现这一点:

lst = [[None] for _ in range(5)]

lst[0].append([0])

它将仅更新索引为0的内部列表,其他内部列表将保持不受影响:

[[None, [0]], [None], [None], [None], [None]]

当您创建一个这样的列表时:[[None]]*5,您实际上是在创建一个包含对同一内部列表[None]的五个引用的列表.

This means that when you modify the inner list using lst[0].append([0]), it modifies the same inner list object that is referenced in all five positions of your outer list. enter image description here

Python-3.x相关问答推荐

根据样本量随机 Select 组内样本

字符串块数组:如何根据一个数组中的元素对另一个数组中的元素进行分组

使用具有相同索引的多次出现的索引列表更新NumPy数组

可以在 Python 的上下文管理器中调用 sys.exit() 吗?

如何对具有多个列值的 pandas 数据框进行数据透视/数据透视表

使用gekko python的混合整数非线性规划

如何向 scikit-learn 函数添加类型提示?

为什么 return node.next 会返回整个链表?

Python.在循环中填充字典的问题

判断 gekko 中的表达式

Python rolling_corr 取消后,应该用什么方法来处理

请求:RecursionError:超出最大递归深度

如何模拟 Django 模型对象(及其方法)?

__cause__ 和 __context__ 有什么区别?

TypeError:列表索引必须是整数或切片,而不是列表

如何使用 Python 订阅 Websocket API 通道?

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

为什么 Python 不能识别我的 utf-8 编码源文件?

将 Python 字节转换为无符号 8 位整数

print(... sep='', '\t' ) 是什么意思?