给定列表:
x = [x for x in range(10)]
Run Code Online (Sandbox Code Playgroud)
打印出索引和值:
for i in range(-10, len(x)):
print i, ": ", x[i]
Run Code Online (Sandbox Code Playgroud)
输出是:
-10 : 0
-9 : 1
-8 : 2
-7 : 3
-6 : 4
-5 : 5
-4 : 6
-3 : 7
-2 : 8
-1 : 9
0 : 0
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
9 : 9
Run Code Online (Sandbox Code Playgroud)
但
print x
Run Code Online (Sandbox Code Playgroud)
收益:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
为什么实际列表的长度是初始化列表的两倍?
Mar*_*ers 12
您正在使用负面索引.那些工作也是; 在Python中,索引<0索引从最后开始.因此,有两种不同的索引元素的方式,从开始和结束计算.
例如,索引2和-8两者都引用第3个元素x,因此两个索引都为您提供值2.
因此,列表的长度不会超过两倍,您只需打印两次值; 一次为负面指数,再一次为正面.
请参阅序列类型操作表下的注释#3 :
- 如果i或j为负数,则索引相对于字符串的结尾:
len(s) + i或者len(s) + j被替换.但请注意,这-0仍然是0.
指数也可能是负数,从右边开始计算:
Run Code Online (Sandbox Code Playgroud)>>> word[-1] # last character 'n' >>> word[-2] # second-last character 'o'
Python支持负索引以及访问列表元素的正索引.
在负索引中,从列表末尾向后计数访问元素.
因此,
索引-1处的元素基本上是列表的最后一个元素,即索引处的元素9.
索引-2处的元素是第二个元素,即索引处的元素8.
..
..
索引-10处的元素是第一个元素,即索引处的元素0.
您的列表大小不是两倍.您只是打印出相同的元素两次,因为它们是同一个对象,您只是使用两种不同的方式来访问同一个对象.
您可以使用is操作员检查它们是否相同.
>>> x[0] is x[-10] # Both point to the same object
True
>>> x[1] is x[-9] # Both point to the same object
True
...
...
>>> x[9] is x[-1] # Both point to the same object
True
Run Code Online (Sandbox Code Playgroud)