Python 2.7 打印列表的一部分,从末尾开始,然后;“循环”;回到开始不工作

Python 2.7 打印列表的一部分,从末尾开始,然后;“循环”;回到开始不工作,python-2.7,Python 2.7,输出为空列表:[] 我正在用列表进行测试,根据我从教程中了解到的情况,我认为输出应该是[d,1,2] 有人能帮我弄清楚为什么不是输出吗?相反,我建议您创建自己定义的函数,如下所示: >>> mylist = [ 1, 2, 3 , 5, 'd'] >>> print 'mylist[-1:2] = ',mylist[-1:2] 这将在列表上循环,并将列表的每个值添加到另一个数组中,然后返回该数组 或者,您可以使用以下代码将它们添加到一起: >>

输出为空列表:[]

我正在用列表进行测试,根据我从教程中了解到的情况,我认为输出应该是
[d,1,2]

有人能帮我弄清楚为什么不是输出吗?

相反,我建议您创建自己定义的函数,如下所示:

>>> mylist = [ 1, 2, 3 , 5, 'd']

>>> print 'mylist[-1:2] = ',mylist[-1:2]
这将在列表上循环,并将列表的每个值添加到另一个数组中,然后返回该数组

或者,您可以使用以下代码将它们添加到一起:

>>> def loop(list, start, end):
...     array = []
...     for k in range(start, end+1):
...             array.append(list[k])
...     return array
... 
>>> x = [1, 2, 3, 4, 5]
>>> desired_output = [5, 1, 2, 3]
>>> loop(x, -1, 2)
[5, 1, 2, 3]
>>> loop(x, -1, 2) == desired_output
True
>>> 

要理解代码返回空列表的原因,必须注意python中访问列表元素的工作方式。在python列表上使用
进行索引(或切片)的工作方式如下:

[x[-1]] + x[:2]
stop
必须始终大于
start
,列表索引/切片才能工作

当您使用负数作为索引访问列表中的元素时,例如
a_list[-1]
,python会将列表的长度添加到列表中,并提供所需的内容。例如:

a_list[start:stop:step]
所以当你做
mylist[-1:2]
时,它实际上意味着
mylist[4:2]
。这违反了
启动
停止条件。并因此返回一个空列表

这就是您正在寻找的:

a_list = [1, 2, 3, 4, 5]
a_list[-1] == a[5 - 1]

使用负数进行切片(请参阅)不会使列表成为环形缓冲区。这只是指向列表中某个元素的另一种方式。所以,你真正需要的是:从索引4开始到索引2结束的列表。没有意义,因此你什么也得不到。

此外,你认为它的输出不会是那样,即使它有效
x[2]
返回列表的第三个值,而不是第二个值。实际上,python不会在stop-1 inclusive停止打印,而不是stop inclusive或“stop exclusive”;)+1
mylist[-1::]+mylist[:2]
会更好,可以与任何起始索引一起使用。
[mylist[-1]] + mylist[:2]