>>> mylist = [ 1, 2, 3 , 5, 'd']
>>> print 'mylist[-1:2] = ',mylist[-1:2]
输出是一个空列表:[]
我正在测试列表,从目前为止我从教程中理解的内容使我认为输出将是[d, 1, 2]
任何人都可以帮助我,为什么不是输出?
答案 0 :(得分:3)
要理解为什么你的代码返回一个空列表,重要的是要注意如何访问python中的列表元素。在python列表(或切片)上使用:
进行索引的方式如下:
a_list[start:stop:step]
stop
必须始终大于start
才能使列表索引/切片工作。
当您使用负数作为索引访问列表中的元素时,比如说a_list[-1]
,python会将列表的长度添加到它,并为您提供所需的内容。例如:
a_list = [1, 2, 3, 4, 5]
a_list[-1] == a[5 - 1]
因此,当您执行mylist[-1:2]
时,它实际上意味着mylist[4:2]
。这违反了start
< stop
条件。因此返回一个空列表。
这就是你要找的东西:
[mylist[-1]] + mylist[:2]
答案 1 :(得分:0)
Slicing does not work that way in python.相反,我建议您创建自己定义的函数,如下所示:
>>> 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
>>>
这循环遍历列表,并将列表的每个值添加到另一个数组中,然后返回该数组。
或者,您可以使用以下代码将它们添加到一起:
[x[-1]] + x[:2]
答案 2 :(得分:0)
使用负数切片(请参阅string slicing)不会使列表成为一个环形缓冲区。它只是指向列表中元素的另一种方式。所以,你要求的是:从索引4开始到索引2结束的列表。没有意义,因此你什么也得不到。