为什么使用负索引切片的数组中的最后一个元素没有显示?

Why the last element in array using negative index slice is not showing?

提问人:juangalicia 提问时间:9/1/2022 更新时间:9/1/2022 访问量:695

问:

我想使用 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]
python list for-loop 切片

评论


答:

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]