python - 数组单字段更新乘法
问题描述
我生成一个列表,列表中的每个元素也是一个列表。我使用一个带有“for”循环的函数来完成它。当我更新列表的单个值时,它会在每个子列表中更新。
我注意到当我手动创建一个列表时,例如:
array = [['O', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
一切都按预期工作。但是,当我使用产生完全相同输出的函数时,它会失败。
def array_generation(size):
array = []
row = ['O'] * size
for i in range(size):
array.append(row)
return array
myArray = array_generation(3)
myArray[0][0] = "S"
实际结果:[['S', 'O', 'O'], ['S', 'O', 'O'], ['S', 'O', 'O']]
预期结果:[['S', 'O', 'O'], ['O', 'O', 'O'], ['O', 'O', 'O']]
解决方案
当您生成数组时,您会附加多次相同的引用。因此,当您更改指针的值时,您会更改每个值。
试试这个:
def array_generation(size):
return [['O'] * size for _ in range(size)]
推荐阅读
- string - 计算字符串解决方案中的元音
- xcode - 如何在 SwiftUI 中使用带有结构的 if 语句?
- javascript - 使用 styled-component 将数组渲染到行
- asp.net - ASP.NET_SessionId cookieSameSite 问题
- java - 如何在其成员函数kotlin中调用构造函数?
- cassandra - 如何建模账户逻辑?
- python - Python:请求 POST 方法未将文件上传到 Web 服务器
- r - 跨不同行和列的多个矩阵元素
- laravel - Laravel 7.2 Illuminate\Foundation\Http\FormRequest 中的奇怪行为
- javascript - puppeteer web 抓取条件 if 语句