在Python中反向索引?

Moh*_*imi 11 python

我知道[end:start:-1]以相反的顺序切割列表.

例如

a = range(20)
print a[15:10:-1] # prints [15, ..., 11]
print a[15:0:-1] # prints [15, ..., 1]
Run Code Online (Sandbox Code Playgroud)

但你无法到达第一个元素(示例中为0).似乎-1是一个特殊值.

print a[15:-1:-1] # prints []  
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

zha*_*gyu 14

您可以将变量分配给None:

>>> a = range(20)
>>> a[15:None:-1]
[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 这(使用“None”)可能是最好的解决方案,但请注意,您也可以一直使用负索引:“a[-5:-21:-1]”为您提供相同的切片,包括最后的“一个[0]`元素。 (2认同)

Pab*_*blo 13

省略结束索引:

print a[15::-1]
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Python2.x 中,就字符数而言,最简单的解决方案应该是:

>>> a=range(20)

>>> a[::-1]
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

虽然我想指出,如果使用 xrange(),索引将不起作用,因为 xrange() 给你一个 xrange 对象而不是一个列表。

>>> a=xrange(20)
>>> a[::-1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
Run Code Online (Sandbox Code Playgroud)

在 Python3.x 之后,range() 做了 Python2.x 中 xrange() 所做的事情,但也有一个改进,可以接受对象的索引更改。

>>> a = range(20)
>>> a[::-1]
range(19, -1, -1)
>>> b=a[::-1]
>>> for i in b:
...     print (i)
... 
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
>>> 
Run Code Online (Sandbox Code Playgroud)

range() 和 xrange() 的区别从来源:http : //pythoncentral.io/how-to-use-pythons-xrange-and-range/ 作者:Joey Payne