Python:此代码如何使用负整数 0 作为不同的索引值?

Python: how can this code use negative integer 0 as a distinct index value?

我的算法采用列表 [0,-0,1,-1,2,-2,3,-3] 等,并在伪代码中执行以下操作:

while list:
    d = list.pop()
    objects[abs(d)] *= sign(d)

从这里可以看出为什么需要 -0。如果我将符号单独存储或从 1 或其他内容进行索引,我的代码将不得不变得不那么优雅。如何让 python 存储 0-0

编辑: 基本上我正在实施回溯搜索。因此,该列表中的变量以任意顺序排列,减号表示设置为 false。它遍历并将 0 设置为 true,然后将 0 设置为 false,然后将 1 设置为 true,然后将 -1 设置为 false,等等。在我看来,最优雅的方法是通过使用将真值与索引结合起来减号。

编辑: 我找到了一种更好的方法来使用双端队列来完成我想做的事情。我会留下这个问题,以免浪费这里的答案。

按照 Blender 的建议使用浮点数和函数 copysign:

import math
list=[0.0,-0.0,1.0,-1.0,2.0,-2.0,3.0,-3.0]
objects={}
while list:
    d = round(list.pop(),10)
    if d not in objects:
        objects[d]=1.0
    objects[d] *= math.copysign(1.0,d)

这是另一种可能的解决方案,不涉及使用浮点数。 我们可以定义一个 class ,当我们尝试获取它的符号时,它的功能是 -1 ;当我们将它用作数组的索引时,它的功能是 0 ,使用 [=13 的魔术方法=].

class NegativeZero:
    def __index__(self):
       return 0
    def __int__(self):
       return -1
    def __abs__(self):
       return 0

N = NegativeZero()

myList = [0,N,1,-1,2,-2,3,-3]
while myList:
    d = myList.pop()
    objects[abs(d)] *= sign(int(d))