迭代遍历思维

普通人的思维

这不是胡诌,也不是乱扯,普通人的思维与工程师的思维是不一样的,如果你想掌握一门编程语言,就必须像工程师那样去思考,否则,你永远只能是一个门外汉。

lst = [3, 6, 7, 9, 2]

现在,请你用最快的速度说出列表里最大的数,你可以轻而易举的给出正确答案,是9,很好,请你回忆一下,你刚才是怎么找到这个答案的?

你几乎没有去想,你只是看了一眼,就给出了答案,一共只有5个整数,任何人,只要智商正常,只需要看一眼就知道9是这5个数中的最大值,这就是普通人的思维。

迭代遍历思维

现在让我们做一个思想实验,借此引出迭代遍历思维。刚才的列表里只有5个数字,实在太少了。在这个思想实验里,列表里的数据多达1亿个,你可以想象一下,1亿个数据,整个屏幕都装不下了,那么请你从这1亿个数据中找出最大的数值,你应该怎么办?

很显然,你不能再像之前那样一眼就看出答案,那种几乎无需思考的方法只能解决小数据量的问题,当问题的规模扩大到一定程度后,必须使用新的方法,这个方法就是迭代遍历。

准备一张纸,一支笔,一个橡皮擦,在纸上记录这1亿个数中的第一个,从现在开始,假设这个数就是最大的,接下来,将这1亿个数逐个与纸上的数值进行比较,如果比纸上记录的数值大,则修改纸上的数值,这个方法看起来比较笨,但却十分有效,它不会遗漏任何数值,当1亿个数都比较一遍后,这张纸上的数值就是这1亿个数中的最大值,这就是遍历。

这是我想到的方法,相信你经过一段时间的思考,也能想出类似的方法来,下面使用for循环来遍历列表,找出最大值。

lst = [3, 6, 7, 9, 2]

max_value = lst[0]

for item in lst:

if item > max_value:

max_value = item

print(max_value)

不论是for循环,还是while循环,其背后的思维模式都是迭代遍历,重复着去做一件简单的事情,我们不必担心速度,遍历1亿个整数对计算机来说不过是弹指一挥间的事情。

转变思维

当问题的规模很小时,我们很自然的采用普通人的思维,当问题的规模变的很大时,你也会很自然的切换到工程师的思维。

学习编程过程中,要求你主动的摒弃掉普通人的思维,完全的使用工程师的思维,哪怕这个列表里只有3个数据,也要使用for循环遍历数据找出最大值。

假如你对python的学习已经有些基础,你会提出使用max函数找出最大值,似乎与遍历无关,但需要知道,max的实现,仍然需要遍历整个列表。

python迭代遍历_迭代遍历思维相关推荐

  1. 【数据结构】图-图的遍历_深度优先遍历(动态图解、c++、java)

    文章目录 一.概述 二.深度优先搜索 算法步骤 递归 非递归 图解 BFS树 代码 邻接矩阵实现 邻接表实现 链式前向星实现 三.完整代码 邻接矩阵版 邻接表版 链式前向星版 四.总结 算法复杂度分析 ...

  2. mysql如何二叉树遍历_二叉树遍历

    二叉树的遍历方式分别为:前序遍历.中序遍历.后序遍历. 前序遍历: 先访问根节点,再访问左节点,最后访问右节点 中序遍历: 先访问左节点,再访问根节点,最后访问右节点 后序遍历: 先访问左节点,再访问 ...

  3. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  4. python numpy遍历_如何遍历numpy.array?

    本文介绍如何遍历numpy.array数组.加载在ndarray上的算术操作和ufunc操作,默认都是elementwise的,但还是有情况可能需要遍历. for loop遍历 >>> ...

  5. python迭代列表_迭代建立列表的最python方法?

    我试图用Python做一些事情,使用下面的一般过程,我想知道实现这一点的最佳方法是什么.在 首先,初始化步骤:创建项目M 创建一个列表L并将M添加到L中 其次,循环以下内容:通过修改添加到L的最后一个 ...

  6. 高中生学python培养思维能力_基于培养思维能力的Python语言程序设计教学

    教育信息化 数码世界 P .203 基于培养思维能力的 Python 语言程序设计教学 周蓉   东莞市商业学校 摘要 :Python 语言有着简洁,高效和生态的三大特点,在中职学校引入计算机程序设计 ...

  7. java容器遍历_高效遍历Java容器详解

    通过本文,你可以更深入的学习 Java 语言中 forEach 语法的知识,以及它和 C 语言形式的 for 循环. Steam API 的对比. 简介 Java 程序员经常使用容器,比如 Array ...

  8. Java对json遍历_如何遍历Java中的json对象

    我正在尝试遍历json文件并获取所需的详细信息,这是我的json { "000": { "component": "c", "de ...

  9. chararray遍历_数组遍历的三种方法

    #import //数组遍历(枚举)对集合中的元素依此不重复的进行遍历 int main(int argc, const char * argv[]) { @autoreleasepool { NSA ...

最新文章

  1. memcached ---- 学习笔记
  2. 30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
  3. 2000/XP自动网络GHOST+全自动改IP
  4. java动态网站框架_大型网站动态应用系统架构
  5. 使用Visual Studio 创建新的Web Part项目
  6. 不能头脑一热,就布局颠覆性技术、上马未来产业
  7. Android 封装handler,Android 异步通信原理机制-- handler
  8. 基于XML操作辅助类
  9. GNS3专用 Cisco IOS下载
  10. PHP高并发高负载下的3种实战场景解决方法
  11. LabVIEW FPGA PCIe开发讲解-实战篇:实验61:PCIe DMA+8位ADC(模拟数据采集卡)
  12. 【2022最新Java面试宝典】—— Memcache面试题(23道含答案)
  13. Altium Designer 18中的System–Design Insight
  14. win下安装mmcv的一些报错
  15. MySQL批量查某个库里每张表的数据量
  16. PlatformIO使用Arduino[Ticker]库(ESP8266)
  17. Real-Time Rendering 4th 译文《六 纹理(下)》
  18. 看士兵突击 一、二集有感--------是单纯 OR 笨?
  19. 度量空间(metric space)
  20. 打工思维VS创业思维,对比哪三个方面不同

热门文章

  1. STM32驱动陀螺仪MPU6050的应用实例
  2. Js逆向教程-10常见代码混淆
  3. 取消usb计算机连接网络,usb连接(如何设置usb网络连接)
  4. WiFi以及WLAN技术介绍
  5. 问题 F: 【数论】青蛙的约会
  6. RoboCup仿真3D底层通信模块介绍(一)
  7. 单元测试:通过读取csv/xml数据并且结合使用allure展示测试报告,验证开发中的add()和reduct()操作(在@allure.story分别实现相加减)
  8. 从DLL生成LIB文件
  9. 微信服务器是否记录视频信息,微信视频号有访客记录吗 微信视频号可以查看浏览记录吗...
  10. tl wn322g linux驱动下载,TL-WN322G+驱动