python - 在python中索引二维数组
问题描述
我一直在尝试使用语法在 python 中更改二维数组中的单个项目,x[2][3]=1
但不仅仅是更改第二行第三列中的项目,它最终会更改所有第三列的值。我的代码如下:
population = [[0]*20]*5
population[2][3] = 1
for row in population:
print(row)
这输出
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但我只想
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我将如何索引该项目以使其仅更改第二行和第三列?
我在 repl.it 上使用 python 3.7.4
解决方案
采用 :
population = [[0]*20 for _ in range(5)]
改为生成列表。您使用的方法是引用同一个对象 5 次,而不是创建 5 个单独的列表。要检查这一点,您可以使用is
运算符:
>>> population = [[0]*20]*5
>>> population[0] is population[1]
True
>>> population = [[0]*20 for _ in range(5)]
>>> population[0] is population[1]
False
推荐阅读
- javascript - 焦点离开输入框时如何使用Vue调用API?
- matlab - 如何在 matlab 包中使用静态工厂方法?
- proxy - 带有 Fortinet-Proxy 的 Python 请求最终会违反协议
- powershell - 如何使用 PowerShell 获取 ESXi 版本列表?
- node.js - 如何动态修改猫鼬模式,我必须添加初始猫鼬模式中未定义的动态字段
- azure-active-directory - Azure AD SCIM - 如何启用预配部分
- java - 序列化与链接表实体的多对多关系
- ajax - 使用 PHPMailer 从联系表单 SMTP 服务器接收消息
- reactjs - 如何在样式化输入元素(样式化组件)中添加图标?
- reactjs - 如何强制一个反应组件不重新渲染?