python - 列表中的元素在 python 中被覆盖
问题描述
几天来,我一直在努力弄清楚为什么我的 python 列表中的项目被覆盖了。基本上我必须实现一个将矩阵旋转 8 次的函数。
def rotate_ring(matrix, offset):
dim = len(matrix[0])
print(dim)
last_element = matrix[offset][offset]
for j in range(1 + offset, dim - offset):
matrix[offset][j-1] = matrix[offset][j]
matrix[offset][dim-1-offset] = matrix[1+offset][dim-1-offset]
for i in range(1 + offset, dim - offset):
matrix[i-1][dim-1-offset] = matrix[i][dim-1-offset]
matrix[dim-1-offset][dim-1-offset] = matrix[dim-1-offset][dim-2-offset]
for j in range(1+offset, dim-offset):
matrix[dim-1-offset][dim-j] = matrix[dim-1-offset][dim-j-1]
matrix[dim-1-offset][offset] = matrix[dim-2-offset][offset]
for i in range(1+offset, dim-offset):
matrix[dim-i][offset] = matrix[dim-i-1][offset]
matrix[1+offset][offset] = last_element
return matrix
def rotate_matrix(matrix):
dim = len(matrix[0])
for offset in range(0, int(dim/2)):
matrix = rotate_ring(matrix, offset)
return matrix
上面的函数是旋转矩阵的函数,它们这样做是因为我检查了它们。实现了这些功能后,我实现了另一个功能
def compass_filter(kernel):
#result = np.zeros(gray.shape, dtype=np.float)
#result = np.zeros(gray.shape, dtype=np.float)
results = []
results.append(kernel)
for i in range(0,7):
kernel = rotate_matrix(kernel) #rotate the kernel
print(kernel)
results.append(kernel) #appending to results
return results
迭代 8 次(因为我总是有 8 个内核)并将内核附加到列表中。我遇到的问题是打印了新的旋转内核:
,但是当我打印最终列表时,我看到的只是最后一个内核打印了 8 次。有人有什么问题吗?我还尝试在 for 循环中为新元素创建另一个列表,然后将其附加到循环外的列表中。谢谢!
解决方案
请更改功能罗盘过滤器如下:
def compass_filter(kernel):
results = []
results.append(kernel)
for i in range(7):
kernel_ = np.array([rotate_matrix(kernel)])
print(kernel_)
results.append(kernel_)
return results
推荐阅读
- lua - 用 lua 本身剖析 lua 代码
- mysql - mysql中的条件计数
- java - 从字符串中提取数字获取数字格式异常
- grafana - 在表格视图中创建具有特定单元格值的绝对链接
- nginx - 带有 web uwsgi 和 nginx 的烧瓶无法运行 index.html
- docker - 为使用 docker-compose 启动的 Rancher 2.x 的证书管理器创建颁发者
- logging - 记录或存储 Ejabberd 会话信息
- powershell - Azure Data Lake:使用 ARM 和 PowerShell 成功部署后如何添加用户权限
- ionic-framework - Ionic v3,在哪里可以找到关于指令的文档
- javascript - 带有鼠标悬停的 Jquery 仅适用于悬停