我了解到Python列表也可以使用负索引遍历,所以我尝试使用负索引对列表进行切片/子列表,但我不能切片到最后。在
我的名单是:
areas = ["hallway", 11.25, "kitchen", 18.0, "living room", 20.0, "bedroom", 10.75, "bathroom", 9.50]
我知道切片语法是[start:end]
,并且没有计算结束索引,所以我做了upstairs = areas[-4:0]
,但这并没有给出列表的最后一个元素。在
Tags:
首先,我想知道如何使用areas[-4:0]访问切片,它应该返回一个空列表。在
https://repl.it/repls/CarefreeOilyLine
您可以使用区域[-4:] 它应该返回
实际上,您可以将
^{pr2}$-4
看作len(areas) - 4
之类的和0不能同时表示0和len(面积)-0。 当然,它与
areas[-4:len(areas)]
一起工作。在0
不是负数,这就是为什么它总是指向最左边的元素。在如果您是硬编码一个切片,这是没有问题的,因为您可以像
areas[-4:]
那样去掉右边界但是如果边界是在运行时计算的,该怎么办呢?在
你发现这行不通。在
你经常会听到只添加列表的长度:
^{pr2}$但这也并不总是有效的:
下面是一个习语,它适用于更多情况:
但你也可以打破这个:
我们从中学到了什么?负索引对于硬编码来说是可以的,但是在动态使用时需要一些小心。 在一个程序中,避免否定语义并一致地使用
max(0, index)
可能是最安全的。在^{cd1>}转换为^{cd2>},这是从更高的索引有效地分割到更低的。从语义上讲,这没有多大意义,结果是一个空列表。
您要寻找的是:
当没有指定最后一个索引时,假设您将切片到最后一个索引。
作为一个旁白,当您反向切片时,指定^{{cd3>}是有意义的。例如
^{pr2}$刚好是完全有效的。这里,您可以从^{cd4>}向下切片到(但不包括)索引^{cd3>},相反。
相关问题 更多 >
编程相关推荐