【发布时间】:2023-03-06 06:29:01
【问题描述】:
想象一个列表:
a = [1, 2, 3, 4, 5, 6, 7, 8]
您只想通过以下方式迭代并打印此列表中的切片:
for i in range(len(a)-2):
print(a[2: -i])
这会产生:
[]
[3, 4, 5, 6, 7]
[3, 4, 5, 6]
[3, 4, 5]
[3, 4]
[3]
在这里,我注意到将列表索引指定为a[2: -0] 会返回一个空列表。
我原以为这会返回索引 2 以上的所有数字。
这种行为有简单的解释吗?
回到期望结果的示例:
[3, 4, 5, 6, 7, 8]
[3, 4, 5, 6, 7]
[3, 4, 5, 6]
[3, 4, 5]
[3, 4]
[3]
if 语句的引入似乎是处理此问题的笨拙方法。如:
for i in range(len(a)-2):
if i == 0:
print(a[2:])
else:
print(a[2:-i])
有没有更好的办法?
【问题讨论】:
-
据我所知,对于 python,它是 0 还是 -0 并不重要,因此
a[2 : -0]被改写为a[2 : 0],实际上是一个空列表 -
确实,对于整数
-0是0。浮点数对-0.0有一个单独的值,但您不能将浮点数用于索引列表。 -
>>> -0 == 0 真