切片以反转python中列表的一部分

时间:2017-04-19 21:10:20

标签: python

我有一个列表,我想从后到尾提取一个子列表。有两行代码,这是

mylist = [...]
mysublist = mylist[begin:end]
mysublist = mysublist[::-1]

是否有切片符号在一行中获得相同的效果?此

mysublist = mylist[end:begin:-1]

不正确,因为它包含end并排除begin元素。此

mysublist = mylist[end-1:begin-1:-1]
begin为0时

失败,因为begin-1现在是-1,它被解释为mylist的最后一个元素的索引。

3 个答案:

答案 0 :(得分:4)

如果Nonebegin,请使用0

mysublist = mylist[end - 1:None if not begin else begin - 1:-1]

None表示“默认”,与省略值相同。

您始终可以将条件表达式放在单独的行中:

start, stop, step = end - 1, None if not begin else begin - 1, -1
mysublist = mylist[start:stop:step]

演示:

>>> mylist = ['foo', 'bar', 'baz', 'eggs']
>>> begin, end = 1, 3
>>> mylist[end - 1:None if not begin else begin - 1:-1]
['baz', 'bar']
>>> begin, end = 0, 3
>>> mylist[end - 1:None if not begin else begin - 1:-1]
['baz', 'bar', 'foo']

答案 1 :(得分:2)

您可以简单地将两行折叠成一行:

mysublist = mylist[begin:end][::-1]

答案 2 :(得分:1)

您始终可以使用功能转换的强大功能:

mysublist = list(reversed(mylist[begin:end]))