从末尾开始的迭代切片索引(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])
我有一个列表(实际上是一个 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])