【问题标题】:Do Lists "loop back" in such a fashion? [duplicate]列表是否以这种方式“循环”? [复制]
【发布时间】:2016-02-02 22:18:14
【问题描述】:

考虑以下代码:

def mystr(L):
   print(L[0])
   return L[-1]

mystery_list = [2,5]
print(mystr(mystery_list))

Output (stdout):
2
5

我认为 Python 一旦进入负数区域,就会开始倒数?因此 [-1] 是最后一个元素,[-2] 是倒数第二个元素。我在这方面是正确的吗?

这种行为是否存在于 Python 的其他地方(即:字符串)?

如果我创建此列表的副本,并且我从负数开始到 0 - 列表会倒置吗?即 newList = [-1:0]

谢谢。

【问题讨论】:

  • 你可以简单地尝试做你描述的事情并自己回答你的问题......
  • 您的问题是关于切片/反转列表还是什么?是的,负指数从右开始计数。是的,索引通常适用于字符串而不是列表——任何支持它的方法。不,这不会颠倒列表,因为“步骤”仍然是积极的。反向是[::-1]
  • Python 确实允许对列表和类似序列的对象(元组、字符串、双端队列等)进行负索引。
  • 对负索引的支持取决于类的 getitem 方法。 AFAIK,所有 CPython 内置类都有这个。请注意,itertools.islice 不支持负索引,但是,无限的可迭代对象甚至可能没有“右端”。

标签: python list python-3.x indexing slice


【解决方案1】:

是的,使用负数索引是相对于列表末尾的。这适用于 python all python sequences(以及许多其他旨在表现得像序列的对象)。

如果切片定义为sequence[i:j],则根据链接文档

如果ij 为负数,则索引相对于字符串的结尾:替换len(s) + ilen(s) + j。但请注意,-0 仍然是 0

序列的一些例子是:

  • 字符串
  • unicode
  • 元组
  • 列表
  • xrange
  • 字节数组

【讨论】:

    【解决方案2】:

    是的,你的这个假设是正确的。字符串、元组、列表或任何序列都符合此行为并支持负索引。示例:

    Python 3.4.0 (default, Apr 11 2014, 13:05:11)
    [GCC 4.8.2] on linux
    >>> a = [1, 2, 3, 4, 5]
    >>> b = (1, 2, 3, 4, 5)
    >>> c = "12345"
    >>> print(a[-1])
    5
    >>> print(b[-1])
    5
    >>> print(c[-1])
    5
    

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2014-01-04
      • 2018-10-22
      • 2020-11-28
      • 1970-01-01
      相关资源
      最近更新 更多