如何创建带负索引的python列表

时间:2014-12-11 20:00:40

标签: 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来自他们的基础架构,只是将输出打印到Web控制台。

我做错了什么?

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

如果您使用的是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]==-1a[5]==-5

答案 1 :(得分:1)

唯一令我印象深刻的是

 for i in xrange( -20, 0, -1 ):

似乎非常错误,因为第三个参数是步长...你将从-20开始每步-1,意味着下一个数字是-21

以下是语法错误

a = []
a[0] = 5

你应该a = [None]*20

答案 2 :(得分:1)

负索引与某个正对应项相关,因此列表将无济于事。
如果要将数据保留在负数和正数位置,请使用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的键是跨越所需范围的数字线。像常规列表一样为其编制索引,但现在负索引是独立的。但是,切片无法像列表一样工作。

答案 3 :(得分:0)

此代码:

xrange( -20, 0, -1 )

试图从-20向0(独家)向后(即通过-21,-22等),因为那是“错误的”#39;方向,迭代将立即停止而不产生任何元素。 This page为您提供了更为技术性的解释(虽然它与range有些相似):

  

[...]如果step为负数,则最后一个元素是最小的start + i   *步骤大于停止。

此外,您正试图写入不存在的索引列表(更不用说您希望它们为负数 - 负面索引在Python中具有特殊含义) - 这样做如果执行进入循环体,则会出现问题。列表不像关联数组那样工作 - 您无法为任意键设置值。

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

答案 4 :(得分:0)

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

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

如果你需要负指数,你必须使用一个支持任意(可散列)键的dict。