关于python:如何将列表切片到以负索引结尾

How can I slice a list till end with negative indexes

我了解到python列表也可以使用负索引进行遍历,所以我尝试使用负索引对列表进行切片/子列表,但我不能将其切片到最后。

我的清单是:

1
areas = ["hallway", 11.25,"kitchen", 18.0,"living room", 20.0,"bedroom", 10.75,"bathroom", 9.50]

由于知道切片语法是[start:end],并且没有计算结束索引,所以我执行了upstairs = areas[-4:0],但这并没有给出列表的最后一个元素。


这是一areas[-4:0]translates areas[len(areas) - 4: 0]从切片到,从高到低的指数。semantically并不多,这让义和的结果是一个空列表。

你可以找的。

1
2
>>> areas[-4:]
['bedroom', 10.75, 'bathroom', 9.5]

当最后的指数是不是指定的,它是假定你排到很端。

这一规定将使0一边,当你在意识层的反向。例如,

1
2
>>> areas[-4:0:-1]
['bedroom', 20.0, 'living room', 18.0, 'kitchen', 11.25]

perfectly发生是有效的。在这里,你len(areas) - 4层从下到(但不包括0)索引的,反向。


这是不负0数指的是为什么它总是会在最左边的元素。

如果你是单一的层是在硬编码的问题,因为你可以离开只是在右边的areas[-4:]-PSP

但如果你是怎么做的,在运行时计算的结果吗?

1
2
3
4
5
6
7
>>> for left in range(-8, -3, 2):
...     right = left + 4
...     print(areas[left:right])
...
['kitchen', 18.0, 'living room', 20.0]
['living room', 20.0, 'bedroom', 10.75]
[]

你发现这不是工作。

你会经常听到,只是添加到列表的长度:

1
2
3
4
5
6
7
>>> for left in range(-8, -3, 2):
...     right = left + 4
...     print(areas[len(areas)+left:len(areas)+right])
...
['kitchen', 18.0, 'living room', 20.0]
['living room', 20.0, 'bedroom', 10.75]
['bedroom', 10.75, 'bathroom', 9.5]

但这并不总是工作,所以:

1
2
3
4
5
6
7
8
9
>>> for left in range(-12, -3, 2):
...     right = left + 4
...     print(areas[len(areas)+left:len(areas)+right])
...
[]
['hallway', 11.25, 'kitchen', 18.0]
['kitchen', 18.0, 'living room', 20.0]
['living room', 20.0, 'bedroom', 10.75]
['bedroom', 10.75, 'bathroom', 9.5]

操作系统是一个成语,在更多的作品在几例:

1
2
3
4
5
6
7
8
9
>>> for left in range(-12, -3, 2):
...     right = left + 4
...     print(areas[left or None:right or None])
...
['hallway', 11.25]
['hallway', 11.25, 'kitchen', 18.0]
['kitchen', 18.0, 'living room', 20.0]
['living room', 20.0, 'bedroom', 10.75]
['bedroom', 10.75, 'bathroom', 9.5]

但你可以打破这个吧:

1
2
3
4
5
6
7
8
9
10
>>> for left in range(-12, -1, 2):
...     right = left + 4
...     print(areas[left or None:right or None])
...
['hallway', 11.25]
['hallway', 11.25, 'kitchen', 18.0]
['kitchen', 18.0, 'living room', 20.0]
['living room', 20.0, 'bedroom', 10.75]
['bedroom', 10.75, 'bathroom', 9.5]
[]

从这学习,我们是什么?负指数是好的,但需要一些硬编码的动态护理时使用。在程序中,它可以被避免的负safest consistently max(0, index)语义和使用。


首先,我想你怎么能接入层利用区:0 [ 4 ],它应该返回一个空列表。

http:/ / / / carefreeoilyline repls repl.it

您可以使用[ 4 ]。这应该返回

1
2
> areas[-4:]
=> ['bedroom', 10.75, 'bathroom', 9.5]

事实上,你可以认为-4样的len(areas) - 4

1
2
3
4
5
6
7
8
> areas[len(areas)-4:]
=> ['bedroom', 10.75, 'bathroom', 9.5]
> areas[0:-4]
=> ['hallway', 11.25, 'kitchen', 18.0, 'living room', 20.0]
> areas[0:len(areas)-4]
=> ['hallway', 11.25, 'kitchen', 18.0, 'living room', 20.0]
> areas[0:6]
=> ['hallway', 11.25, 'kitchen', 18.0, 'living room', 20.0]

不能代表0和0 - 0和Len(区)在同一时间。当然,它的工作与areas[-4:len(areas)]