如何创建具有负索引的python列表

如何创建具有负索引的python列表,python,list,indexing,Python,List,Indexing,我是python新手,需要创建一个带有负索引的列表,但到目前为止还没有成功 我正在使用以下代码: a = [] for i in xrange( -20, 0, -1 ): a[i] = -(i) log.info('a[{i}]={v}'.format(i=i, v=a[i])) else: log.info('end') 并将日志输出作为 end 顺便说一句,我正在使用一个名为quantopian的站点,因此log.info来自他们的基础设施,只需将输出打印到we

我是python新手,需要创建一个带有负索引的列表,但到目前为止还没有成功

我正在使用以下代码:

a = []
for i in xrange( -20, 0, -1 ):
    a[i] = -(i)
    log.info('a[{i}]={v}'.format(i=i, v=a[i]))
else:
    log.info('end')
并将日志输出作为

end
顺便说一句,我正在使用一个名为quantopian的站点,因此log.info来自他们的基础设施,只需将输出打印到web控制台中即可

我做错了什么


提前谢谢你的帮助。

我唯一感到震惊的是

 for i in xrange( -20, 0, -1 ):
似乎非常错误,因为第三个参数是步长。。。从-20开始,你每一步走-1,意味着下一个数字是-21

下面是一个语法错误

a = []
a[0] = 5

如果您正在使用Quantopian,建议您熟悉numpy和pandas。例如:

>>> import numpy as np 
>>> -1*np.arange(20)

array([  0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -12,
       -13, -14, -15, -16, -17, -18, -19])
然后您将拥有
a[1]=-1
a[5]=-5
,等等。

此代码:

xrange( -20, 0, -1 )
正试图从-20向后(即通过-21、-22等)变为0(独占),因为这是在“错误”的方向上,迭代将立即停止,而不会产生任何元素。为您提供了更为技术性的解释(尽管其适用于
范围
,这有点类似):

[…]如果阶跃为负,则最后一个元素是最小的start+i *比停止大一步

此外,您正试图以不存在的索引写入一个列表(更不用说您希望它们为负-负索引在Python中有特殊含义)-如果执行进入循环体,这将是一个问题。列表的工作方式与关联数组不同-不能为任意键设置值


如果您能告诉我们您期望的输出是什么,我们可以帮助您解决这两个问题。

您不能创建带有负索引的列表。它们从零开始,然后按1计数。如果在访问元素时使用负索引,Python会将其转换为相对于列表末尾的正索引

>>> a = [1, 2, 3]
>>> a[0]
1
>>> a[2]
3
>>> a[-1]   # Same as a[len(a)-1]
3

如果需要负索引,则必须使用dict,该dict支持任意(可散列)键。

负索引与某些正索引相关,因此列表没有帮助。
如果要将数据保持在正负位置,请使用dict:

给定的

numline = range(-3, 3)
data = "abcedfg"
代码

a = dict(zip(numline, data))
a
# {-3: 'a', -2: 'b', -1: 'c', 0: 'e', 1: 'd', 2: 'f'}

a[-1]
# 'c'

在这里,我们要确保dict的键是一条跨越我们想要的范围的数字线。将其作为常规列表编制索引,但现在负索引是独立的。但是,切片不像列表那样工作。

您希望输出是什么?嗨,好吧,如果python中的负索引向后读取,那么我应该能够为xrange(20)中的I执行:a[I]=I,然后执行a[-4],从末尾读取第五个元素!这是正确的吗?谢谢你的回答。是的,但是你必须做
a.append(i)
而不是
a[i]=i
。另外,
a[-4]
提供了从末尾开始的第四个元素,而不是第五个元素。希望这能帮上忙。太好了,明白了,这就是我想要的。多谢了,汉克斯,我知道numpy和熊猫在这个网站上玩得很多,但大部分都是为了避免。不过我会仔细看看。谢谢你的回答。