提问人:juangalicia 提问时间:9/1/2022 更新时间:9/1/2022 访问量:695
为什么使用负索引切片的数组中的最后一个元素没有显示?
Why the last element in array using negative index slice is not showing?
问:
我想使用 for 循环将数组从最后一个元素切成第一个元素以减少数组,这是我的代码,但由于某种原因,最后一个元素没有显示。忽略函数的名称。
def find_even_index(arr):
for i in range(len(arr)):
print(arr[-(len(arr)):-i])
find_even_index([1,2,3,4,3,2,1]),3)
结果:
[]
[1, 2, 3, 4, 3, 2]
[1, 2, 3, 4, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
预期结果:
[1, 2, 3, 4, 3, 2, 1]
[1, 2, 3, 4, 3, 2]
[1, 2, 3, 4, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
答:
1赞
Mitchnoff
9/1/2022
#1
加工:
def find_even_index(arr):
for i in range(len(arr)):
print(arr[:len(arr) - i])
find_even_index([1,2,3,4,3,2,1])
#prints:
[1, 2, 3, 4, 3, 2, 1]
[1, 2, 3, 4, 3, 2]
[1, 2, 3, 4, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
当你有
arr[:-i]
我从 1 开始,所以你告诉它,本质上,要做
arr[0:-0]
# which is
arr[0:0]
这就是导致它不打印任何内容的原因。相反,从数组的长度开始,然后逐渐减去 1。
3赞
constantstranger
9/1/2022
#2
可以使用负索引指定的最右边是 ,它指的是序列中的最后一项。但是,切片语义是从切片中排除的索引。-1
:
因此,无法使用 右侧的负索引将最后一项包含在列表中。:
您可以通过将 :-i
-i if i else len(arr)
def find_even_index(arr):
for i in range(len(arr)):
print(arr[-(len(arr)):-i if i else len(arr)])
find_even_index([1,2,3,4,3,2,1])
输出:
[1, 2, 3, 4, 3, 2, 1]
[1, 2, 3, 4, 3, 2]
[1, 2, 3, 4, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1, 2]
[1]
评论