第16节,严谨机械,你不需要技巧

请看下面的代码

lst = [3, 6, {"int": [[4, 7], [3, 6]]}, [4, 6, {"int": [4, [3, 6]]}, [5, [4, 9, 10]]]]

print(lst[2]['int'][1][1])
print(lst[3][3][1][0])

看代码,说出两个print语句输出的内容。

很多人看到这个题目就已经懵逼了,完全不知所措,但这样的题目却是如此的简单,以至于没有任何技术含量,因为这里面压根就没有算法,当你看完我的教程,你会感慨,这分明就是小学的10以内的加减法。

1. 没有技巧

你想掌握编程的思维,可我要告诉你,编程思维不是武侠小说里心法秘诀,我甚至不能对编程思维下一个准确的定义,我只能将我对问题思考的过程总结下来分享给你,我要强调一点,编程没有技巧,一丁点技巧都没有,任何想我从书中学得一点编程技巧的人,可以放弃本教程了,因为这份教程让你失望了。

2. 数据类型

没有技巧,但是有方法。方法很简单,你必须清楚的知道代码里的每一个变量的数据类型。我强调数据类型,是因为我们写的任何代码都是数据+算法,你必须清楚的知道自己在操作什么样的数据,你连数据是什么都不知道,如何对它进行计算呢?

变量lst的数据类型是什么?是列表,这太简单了,接下来请回答,lst列表里有多少个对象?这一步,就会难住很多人。

你之所以学不会,学不好python,不是因为python复杂难懂,而是你不会学习,你总是走马观花,囫囵吞枣,得过且过不求甚解,以至于最简单的问题,列表lst中有多少个对象这样难度等同于1+1等于几的问题都不能正确回答。

列表里有4个对象,他们分别是

  1. 3
  2. 6
  3. {"int": [[4, 7], [3, 6]]}
  4. [4, 6, {"int": [4, [3, 6]]}, [5, [4, 9, 10]]]

如果你对此感到不解,请回顾列表的定义:整个列表被包裹在一对中括号[]里,每个数据之间,用逗号分隔。列表中的第3个对象是字典,第4个对象是列表,但请不要被他们两个干扰了自己的思维,列表里的元素或者说列表里的对象用逗号分隔,这是列表的定义和要求,你只管按照这个定义去数列表里对象的个数。

严谨,机械,代码和逻辑总是无情的,不需要技巧,我们只关心列表是如何定义的,只关心列表里使用逗号分隔对象,除此以外,不要被任何东西干扰我们的思考和判断。千万不要自作主张,千万不要发明创造,千万不要以为你以为的就是你以为的,在代码与逻辑面前,人类是非常卑微的。

3. 按部就班

接下来,我们一起计算两次print输出的结果,我只演示第一个

lst[2]['int'][1][1])
  1. 已经知道lst是一个列表,那么lst[2] 等于什么呢?列表后面紧跟着一个中括号,中括号里是一个int类型的数据,这是什么操作?这是通过索引访问数据的操作,lst[2] = {"int": [[4, 7], [3, 6]]}

  2. lst[2] 是一个字典,字典后面跟一个中括号,这是什么操作?这是在根据key从字典里获取value的操作,key是字符串int,对应的value是[[4, 7], [3, 6]], 是一个列表,列表里有2个数据。

  3. lst[2]['int'] 是一个列表,在这个列表后面紧跟着一个中括号,中括号里的数值时1,这是在根据索引来访问列表里的数据,lst[2]['int'][1] = [3, 6]

  4. lst[2]['int'][1] 是一个列表,列表后面紧跟着一个中括号,中括号里是数值1,这是在根据索引访问列表里的数据,lst[2]['int'][1][1] = 6

请看上面的分析过程,我有什么技巧么,没有,任何技巧都没有,编程也不需要技巧,我们只需要理解数据,知道它是什么数据类型,知道如何操作它,对于列表,中括号是用来根据索引来访问列表里的数据,对于字典,中括号是用key来访问对应的value,这些都是数据类型部分最最基础的知识,你掌握了么?

如果非要从这里抽象出什么编程思维,我叫它按部就班,管他有多复杂,我就逐个的分析,分析它是什么数据类型,分析这个操作是在做什么,就算你写了100个中括号,我从左向右,一个一个的分析思考,最终一定能得到正确的结果,就是这样的简单,真的没有什么技术含量,你不会,是因为你太贪心,总想着省略这些看似简单的学习过程,直奔飞机大战坦克的游戏,痴人说梦。

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案