在循环中重新分配数组的最后一个索引

Posted

技术标签:

【中文标题】在循环中重新分配数组的最后一个索引【英文标题】:Reassigning last index of an array in loop 【发布时间】:2021-02-07 04:30:44 【问题描述】:

我有点困惑为什么下面的函数有效。我正在尝试将任何数组移动 n 次。我通过创建一个与原始数组长度相同的新数组来做到这一点,并相应地替换数组中的值。

test = [6,1,4,7,8]

def shiftArray(input_array, n):
    max_len = len(input_array)
    max_idx_len = len(input_array)-1
    
    shifted_array = [None]*max_len

    for i in range(0, max_len):
        if i == 0:
            shifted_array[i] = input_array[max_len-n]
        else:
            shifted_array[i] = input_array[i-n]
    return shifted_array

print(shiftArray(test,1))

我最初将 for 循环的范围设置为 range(0, max_idx_len),这对我来说是有意义的,因为数组的索引从 0 开始。但是当我这样做时,数组的最后一个值从未被替换。所以相反,我做了range(0, max_len),它起作用了。但我还是不明白为什么。

此数组中有 5 个值,最大索引为 4,所以当我重新分配 shifted_array 的最后一个索引时 - 我不应该重新分配 shifted_array[4] 而不是 shifted_array[5] 吗?为什么会这样!?

【问题讨论】:

【参考方案1】:

您应该检查range 函数的工作原理。 range(0,10) 只会从 0 到 9 迭代 10 次。它不会到 10。

所以range(0, max_idx_len) 只会迭代到max_idx_len-1,这就是数组的最后一个值永远不会被替换的原因。

希望能回答你的问题。

【讨论】:

以上是关于在循环中重新分配数组的最后一个索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Matlab 中将字符数组的偶数和奇数索引重新分配到一个新的较小字符数组中?

动态数组分配仅返回所有索引中的最后一个元素 C

在循环中暂停并重新启动 setTimeout

Pandas 重新索引并将列分配给新列

如果 cumsum 大于值,则重新启动 cumsum 并获取索引

更改特定索引而不在 Vuejs 中重新渲染整个数组