python - 列表似乎随机变化
问题描述
我正在尝试递归创建一个列表,该列表还过滤已经具有相似值的列表。我无法直接比较它们,因为它们在第 10 ^ -4 和更远的地方有所不同。这些值需要具有 0.09 的最小间距。然而,这似乎可行,当代码再次通过循环运行时,它似乎改变了添加的值。
我尝试过调试,但不知道错误发生在哪里。它似乎没有发生在某个事件中。
for i in range(len(self.poses)):
if self.poses[i].position.z > min_z:
if min_x < abs(self.poses[i].position.x) < max_x:
print('pos x', abs(self.poses[i].position.x))
print('1.1')
#max_x = self.poses[i].position.x
if self.poses[i].position.y > 0.33:
print('2.1')
if self.poses[i].position.y < max_y:
print('3.1')
max_y = self.poses[i].position.y
positions.x = self.poses[i].position.x
positions.y = self.poses[i].position.y
positions.z = self.poses[i].position.z
if len(self.pickposes) == 0:
print('posistion voor real cente:', positions)
print('list empty')
self.pickposes.append(positions)
print(self.pickposes)
else:
tmp = 0
loop_length = len(self.pickposes)
for j in range(loop_length):
if (abs(positions.y - self.pickposes[j].y) > 0.09):
print('y = ', positions.y)
print(j)
print("compared to : ", self.pickposes[j].y)
print('abs pose diff = ', abs(positions.y - self.pickposes[j].y))
tmp += 1
print('tmp in for loop =', tmp)
print('tmp outside for =',tmp)
print('loop length', loop_length)
if loop_length <= self.index:
if tmp == loop_length:
print('posistion to add to l', positions)
print("list of poses:", self.pickposes)
self.pickposes.append(positions)
print("list of poses:", self.pickposes)
我期待一个由坐标组成的列表。其中没有一个是 dubbel,每个周围都有 9 个范围。我得到的结果是:
control_node: ('list of poses:', [x: 0.540071368217
control_node: y: 0.578928947449
control_node: z: 1.15875029564])
control_node: 41
control_node: ('pos x', 0.5376651287078857)
control_node: 1.1
control_node: 2.1
control_node: 3.1
control_node: ('y = ', 0.6925374269485474)
control_node: 0
control_node: ('compared to : ', 0.5789289474487305)
control_node: ('abs pose diff = ', 0.1136084794998169)
control_node: ('tmp in for loop =', 1)
control_node: ('tmp outside for =', 1)
control_node: ('loop length', 1)
control_node: ('posistion to add to l', x: 0.537665128708
control_node: y: 0.692537426949
control_node: z: 1.15663790703)
control_node: ('list of poses:', [x: 0.540071368217
control_node: y: 0.578928947449
control_node: z: 1.15875029564])
control_node: ('list of poses:', [x: 0.540071368217
control_node: y: 0.578928947449
control_node: z: 1.15875029564, x: 0.537665128708
control_node: y: 0.692537426949
control_node: z: 1.15663790703])
control_node: ('pos x', 0.5400646328926086)
control_node: 1.1
control_node: 2.1
control_node: 3.1
control_node: ('tmp outside for =', 0)
control_node: ('loop length', 2)
control_node: ('pos x', 0.5925142168998718)
control_node: 1.1
control_node: ('pos x', 0.5925142168998718)
control_node: 1.1
control_node: ('len list of poses', 2)
control_node: ('list of poses:', [x: 0.540071368217
control_node: y: 0.578928947449
control_node: z: 1.15875029564, x: 0.540064632893
control_node: y: 0.576979875565
control_node: z: 1.15687179565])
control_node: 50
control_node: 51
从改变
x: 0.537665128708 y: 0.692537426949 z: 1.15663790703
至 x:0.540064632893 y:0.576979875565 z:1.15687179565
出乎意料,不应该发生。控制节点使用步进器(数字 41、50、51)以正确的顺序操作其程序。中间没有打印步进器,所以我很确定除了重新启动上面的 for 循环之外,在 2 个列表的打印之间没有发生任何事情。
解决方案
对观察到的行为没有太多解释。附加时可以通过使用 copy.deepcopy('x') 来防止它。
推荐阅读
- python - 带有 simplejson 后端的 jsonpickle 将 Decimal 序列化为 null
- java - 为什么在这种情况下我没有得到 println 的输出?
- docker - 如何在 Dockerfile 中设置帐户的密码?
- javascript - jQuery load() 以及如何知道动态添加的图像何时完成加载?
- python - 使用 for 循环从列表中删除索引范围
- c++ - 如何在不调用模板化值析构函数的情况下将模板化值插入 std::map?
- java - Kubernetes Java Spring 微服务 - 为每个容器/服务副本生成唯一标识符
- javascript - 重置 HTML 正文后引导模式不会关闭
- java - 如何以编程方式从 JKS 文件中检索证书的序列号?
- twitter-bootstrap-3 - aria-expanded="false" 在加载时不起作用