python - 在嵌套 python 列表中对外部维度使用切片分配时出现意外结果
问题描述
在 python 3.7.2 中使用以下代码时,分配将被静默忽略。这是预期的结果吗?
>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> x
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> x[:][1]=17
>>> x
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
有没有更好的方法使用切片来实现将第二列替换为 17 的预期结果?顺便说一句,当使用 [17, 17, 17] 匹配维度时,我得到了相同的结果。
编辑:只是为了避免一些混乱。预期的结果是 [[1, 17, 3], [4, 17, 6], [7, 17, 9]]。
解决方案
x[:]
创建原始列表的副本,并在适当位置修改该新列表。
但是,这个创建的列表是不可访问的(因为没有引用它)。如果你想获得第二个子列表,[17,17,17]
即
x[0] = [17 for _ in x[0]]
但如果你想让它公正[17]
,那么
x[0] = [17]
编辑:好的,看起来我有点误解了这个问题,看起来你想把它当作一种矩阵。对于常规的 python 列表和嵌套列表,没有这样的语法糖,你必须创建一个 for 循环:
for sublist in x:
sublist[1] = 17
使用列表理解,您需要创建一个副本,这首先是 IMO 不需要的。但如果你想要那个
copied_and_modified_x = [[sublist[0], 17, sublist[2]] for sublist in x]
推荐阅读
- excel - Excel VBA将日期与时间转换
- ios - 从表格视图重新加载单元格后管理表格视图单元格,文本字段中的数据不清晰
- asp.net - 撤销/拒绝 ASP.NET 核心中间件中的有效 Json Web 令牌以锁定用户
- tensorflow - 我想在每个纪元结束时调用“on_epoch_end()”。[keras 自定义生成器]
- big-o - 我如何表达 O(n) * O(n log n)
- c# - 如何使用 IntPtr 指针从字节数组中获取新的位图?
- c# - 通过单击超链接访问 WCF
- c# - 如何将表 A 中的两列与表 B 中的两列连接起来 - Linq join MVC
- angular - 无法选择嵌套组件样式角度 7
- git - 如何使用 CLI(Shell 脚本)将现有的 git 存储库从本地服务器传输到 gitlab 存储库?