【问题标题】:how do I create a python list with a negative index如何创建带有负索引的 python 列表
【发布时间】:2015-02-10 10:33:35
【问题描述】:

我是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 控制台。

我做错了什么?

提前感谢您的帮助。

【问题讨论】:

  • 你希望输出是什么?

标签: python list indexing


【解决方案1】:

如果您使用的是 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等。

【讨论】:

  • 谢谢,我知道 numpy 和 pandas 在这个网站上玩了很多,但大部分时间都避免了。不过我会仔细看看。谢谢你的回答。
【解决方案2】:

唯一让我印象深刻的是

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

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

以下是语法错误

a = []
a[0] = 5

你应该这样做a = [None]*20

【讨论】:

    【解决方案3】:

    负指数与一些正指数相关,因此列表无济于事。
    如果您想在负数和正数位置保存数据,请使用 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 的键是跨越我们想要的范围的数字线。像对常规列表一样索引它,除了现在负索引是独立的。但是,切片不像列表那样工作。

    【讨论】:

      【解决方案4】:

      这段代码:

      xrange( -20, 0, -1 )
      

      正试图从 -20 到 0(不包括)向后(即通过 -21、-22 等)因为这是在“错误”的方向上进行,所以迭代将立即停止而不会产生任何元素。 This page 为您提供了更技术性的解释(尽管它与 range 有点相似):

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

      此外,您正试图写入一个列表中不存在的索引(不要介意您希望它们为负的事实 - 负索引在 Python 中具有特殊含义) - 这将是如果执行曾经进入循环体,则会出现问题。列表不像关联数组那样工作——你不能为任意键设置值。

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

      【讨论】:

      • 嗨,好的,如果python中的负索引向后读取,那么我应该能够 for i in xrange(20): a[i]=i 然后再做 aa[-4] 到从最后读取第 5 个元素!它是否正确?谢谢你的回答。
      • 是的,但您必须使用a.append(i) 而不是a[i]=i。此外,a[-4] 提供了从末尾算起的第 4 个元素,而不是第 5 个。希望对您有所帮助。
      【解决方案5】:

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

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

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

      【讨论】:

      • 太好了,这就是我所追求的。非常感谢
      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2022-01-14
      相关资源
      最近更新 更多