【问题标题】:List seems to randomly change列表似乎随机变化
【发布时间】:2019-05-17 17:56:30
【问题描述】:

我正在尝试递归创建一个列表,该列表还可以过滤已经具有相似值的列表。我无法直接比较它们,因为它们在第 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)

我期待一个由坐标组成的列表。其中没有一个是在每个周围有 9 个范围的 dubbel。我得到的结果是:

    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)以正确的顺序操作其程序。中间没有打印步进器,所以我很确定在打印 2 个列表之间没有发生任何事情,除了重新启动上面的 for 循环。

【问题讨论】:

  • 请提供示例数据和代码以重现此问题

标签: python append filtering


【解决方案1】:

对观察到的行为没有太多解释。追加时使用 copy.deepcopy('x') 可以防止。

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2016-04-05
    • 2018-05-30
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多