遍历python列表中的索引

时间:2013-08-31 09:11:20

标签: python list

A是一个列表变量,定义如下:

A= [10 ,78,"m",89]

为什么A[0]A[-0]的值在python shell中执行时相同?

4 个答案:

答案 0 :(得分:6)

0-0是相同的,因为它们都是integer

>>> dis.dis(lambda x: 0)
  1           0 LOAD_CONST               1 (0)
              3 RETURN_VALUE
>>>
>>> dis.dis(lambda x: -0)
  1           0 LOAD_CONST               1 (0)
              3 RETURN_VALUE
>>>

但是,floatdouble存在负零和正零。并且解析器不会跳过符号:

>>> dis.dis(lambda: 0.0)
  1           0 LOAD_CONST               1 (0.0)
              3 RETURN_VALUE
>>> dis.dis(lambda: -0.0)
  1           0 LOAD_CONST               1 (-0.0)
              3 RETURN_VALUE
>>>

如果为零,则最后一位为1,如果为零,则最后一位为0。你可以在这里看到它:

>>> from struct import pack, unpack
>>>
>>> # with float, 32th bit is 1 in negative zero
>>>
>>> '0x%.8x' % unpack('I', pack('f', -0.0))[0]
'0x80000000'
>>> '0x%.8x' % unpack('I', pack('f', 0.0))[0]
'0x00000000'
>>>
>>> unpack('I', pack('f', -0.0))[0] >> 31
1L
>>> unpack('I', pack('f', 0.0))[0] >> 31
0
>>>
>>> # same thing with double, 64th bit is 1
>>>
>>> '0x%.16x' % unpack('Q', pack('d', 0.0))[0]
'0x0000000000000000'
>>> '0x%.16x' % unpack('Q', pack('d', -0.0))[0]
'0x8000000000000000'
>>>
>>> unpack('Q', pack('d', 0.0))[0] >> 63
0
>>> unpack('Q', pack('d', -0.0))[0] >> 63
1L
>>>

您可以阅读有关IEEE floating point的更多信息。

答案 1 :(得分:4)

因为-00值相同

>>> -0
0

您指的是相同的索引,列表的第一个值。没有负整数零这样的东西。

也许您正在寻找-1?负整数从末尾选择:

>>> A = [10, 78, "m", 89]
>>> A[0]
10
>>> A[-1]
89

答案 2 :(得分:2)

>>> -0 == 0
True

所以基本上你看的是相同的元素。

答案 3 :(得分:0)

我认为你因为one's complementtwo's complement而感到困惑。 在一个补码中我们有2个零,在二进制补码中我们只有一个零,现在有零或正零。