python - 我如何推导出这部分算法
问题描述
我是 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]
解决方案
len(reverse)
返回列表具有的元素数。要实际将其用作索引,您需要从中减去 1,因为索引从 0 开始。接下来,i
当我们将i
位置从列表的两端移开并交换它们时,我们也会从中减去。
因此,如果i=1
reverse[i]
指向 2 而reverse[len(reverse)-i-1
指向 3。
推荐阅读
- azure-blob-storage - H2O 直接从 Azure Blob 存储导入 Parquet
- java - 运行测试时如何自动选择springprofile
- python - 获取混淆矩阵的误报和误报相关数据集?
- ffmpeg - 如何使用 FFmpeg 生成 MPEG-DASH 片段和清单
- python - Python double 使用 avro 模式失去精度
- python - 为什么 Python 打包教程中 setup.cfg 的 package_dir 设置在多行?
- redis - Redis 集群中的键不能被删除(并且具有空值)
- reactjs - 导入基于 React 和 Typescript 的组件库会导致启动/构建时出现 Webpack 错误
- reactjs - 为新手创建一个反应函数
- node.js - 设置部署到 GitHub 页面时,`npm deploy` 缺少脚本错误