从末尾开始的迭代切片索引(python):如何避免“-0”等于“0”?

Iterative sliced indexing (python) starting form the end : how to avoid "-0" to be equal to "0"?

我有一个列表(实际上是一个 pandas.DataFrame,但让我们简单点),假设:

a = list(range(10))

我必须对其进行迭代并在每个循环中提取从开始到“移动结束”的所有元素。我想要在第一次迭代时整个列表,在第二次迭代时删除最后一个元素,在第三次迭代时删除最后两个元素......等等。

编码似乎很容易:

for i in range(5) :
    print(i,a[:-i])

事实上,此代码从“1”及更高版本开始运行良好。但是对于 i=0 我得到一个空列表,而我想得到完整列表。

我明白“-0”等于“0”,这就是我出现这种行为的原因...但是我能做些什么吗?

谢谢!

我终于找到了处理方法,方法是将列表长度添加到负索引末尾:

for i in range(5) :
    print(i,a[:len(a)-i])

此修改会在第一次迭代时生成整个列表(所需结果)。

您可以明确计算结束索引:

for i in range(5):
    print(i, a[: len(a) - i])

或在零时用 None 替换结束索引:

for i in range(5):
    print(i, a[: -i or None])