我是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控制台。
我做错了什么?
提前感谢您的帮助。
答案 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]==-1
,a[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。