从3D集合中的边界框

时间:2013-09-11 14:29:11

标签: algorithm python-2.7

我有一系列积分 - 躺在网格上。每个点由大小为3的1d整数数组指定。边界框由此立方体/长方体的两个对角相对角的坐标指定。我在python中编写了以下代码来执行此操作 -

import random as r
list = [[r.randint(-3,3) for j in range(3)] for i in range(90)]
#initialize itmin and itmax
itmin = list[0]
itmax = list[0]
#propagation
for i in range(len(list)):
    for j in range(3):
        itmax[j]=max(itmax[j],list[i][j])
        itmin[j]=min(itmin[j],list[i][j])
print itmax
print itmin

输出到此 - 在python上运行时是 -

[-1, 3, 1]
[-1, 3, 1]  

然而,我原以为它

[ 3, 3, 3]
[-3,-3,-3]  

任何人都能指出我做错了什么吗? 您也可以在线试用 - http://ideone.com/gNvG6I 如果你觉得这个问题没有得到充分的充实,请发表评论。

1 个答案:

答案 0 :(得分:1)

您的itminitmax变量指向同一个列表,因此当您修改一个变量时,另一个变量也会被修改。

在初始化期间,制作初始列表的浅表副本,以便每个变量都有自己独立的副本。

itmin = list[0][:]
itmax = list[0][:]

或者,完全跳过循环并获得最大值和最大值。 min使用列表推导。

import random as r
list = [[r.randint(-3,3) for j in range(3)] for i in range(90)]
itmax = [max(point[i] for point in list) for i in range(3)]
itmin = [min(point[i] for point in list) for i in range(3)]
print itmax
print itmin

结果:

[3, 3, 3]
[-3, -3, -3]