首页 > 解决方案 > 我如何推导出这部分算法

问题描述

我是 Python 编程的初学者,遇到了这个程序。

此算法用于反转列表:

mylist = [1,2,3,4]
reverse = mylist[:]
for i in range(len(reverse)//2):
    reverse[i], reverse[len(reverse) -i -1] = reverse[len(reverse) -i -1], reverse[i]

该算法基于这样的逻辑,即交换过程只会发生在偶数长度的列表的 len/2 元素或奇数长度的列表的 len/2 元素之前,因为如果交换过程发生到最后一个元素,该清单将保持与最初相同。

我明白下面的部分是做什么的,但是我如何推导出它,请解释一下逻辑:

reverse[len(reverse) -i -1]

标签: pythonreversing

解决方案


len(reverse)返回列表具有的元素数。要实际将其用作索引,您需要从中减去 1,因为索引从 0 开始。接下来,i当我们将i位置从列表的两端移开并交换它们时,我们也会从中减去。

因此,如果i=1 reverse[i]指向 2 而reverse[len(reverse)-i-1指向 3。


推荐阅读