打印从列表开始的部分列表和"循环"回到开始不工作

时间:2014-04-16 18:55:13

标签: python-2.7

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

>>> print 'mylist[-1:2] = ',mylist[-1:2]

输出是一个空列表:[]

我正在测试列表,从目前为止我从教程中理解的内容使我认为输出将是[d, 1, 2]

任何人都可以帮助我,为什么不是输出?

3 个答案:

答案 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结束的列表。没有意义,因此你什么也得不到。