gpt4 book ai didi

Python:短坐标函数意外更改传入参数值

转载 作者:行者123 更新时间:2023-11-30 23:44:58 24 4
gpt4 key购买 nike

这里的目标是获取一些坐标列表,例如[[1,2],[3,4],[7,1]],然后计算出 Canvas 应该有多大如果你想打印所有这些坐标。取最大左下坐标和最小右上角坐标,使 Canvas 紧贴这些点。例如,在上面的列表中,我们正在寻找 [[1,1],[7,4]],它定义了所有这些点都适合的最小矩形。

在此函数的中间,我看到传入的“板”被分配了一个新值。

def print_board(board):
# import pdb; pdb.set_trace()
dimensions = None
for i in board:
if dimensions == None:
dimensions = [i, i]
else:
dimensions[0][0] = min(dimensions[0][0], i[0])
#'board' is redefined !!!
dimensions[0][1] = min(dimensions[0][1], i[1])
#dimensions[1][0] = max(dimensions[1][0], i[0])
#dimensions[1][1] = max(dimensions[1][1], i[1])
# (after we get the canvas size
# we print the canvas with the points on it
# but we never make it that far without an error)

当 for 循环遍历传入 board 中的坐标时,它似乎将 board[0] 设置为它当时查看的任何坐标。因此 [[1,2],[3,4],[7,1]] 将首先更改为 [[3,4],[3,4],[7, 1]],然后到 [[7,1],[3,4],[7,1]]

我根本不希望 board 发生变化。

(Python 3.2.2)

最佳答案

当你这样做时

dimensions = [i, i]

您将dimensions中的两个项目设置为板中的第一个点 - 而不是复制该点。

然后当你这样做时

        dimensions[0][0] = min(dimensions[0][0], i[0])
dimensions[0][1] = min(dimensions[0][1], i[1])

您正在将同一点(板中的第一个点)更新为 min 函数的结果。

尝试这样的事情:

def print_board(board):
xs, ys = zip(*board) # separate out the x and y coordinates
min_x, max_x = min(xs), max(xs) # find the mins and maxs
min_y, max_y = min(ys), max(ys)
dimensions = [[min_x, min_y], [max_x, max_y]] # make the dimensions array

关于Python:短坐标函数意外更改传入参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9818234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com