想必关注未闻 Code的同学或多或少都在网上看过各种各样的 Python 入门教程。这些教程在讲 Python 基础数据结构的时候,一般是按照下面这个模式来讲的:
- 数字、字符串、浮点数
- 列表
- 字典
- 集合
- …
这个结构虽然说是中规中矩由浅入深,但是它并没有让读者做到类比学习触类旁通。
所谓类比
为什么这样说呢?因为这些教程的教学模式,使得读者不容易发现字符串、列表、元组的相同之处。
我们从“读”这个角度来看看这三个数据结构。假设有一个字符串叫做a,有一个列表叫做b,有一个元组叫做c。那么大家请看如下的操作。
(1) 按索引读取元素
- a[0] # 字符串第一个字符
- b[0] # 列表第一个元素
- c[0] # 元组第一个元素
- a[3] # 字符串第4个字符
- b[3] # 列表第4个元素
- c[3] # 元组第4个元素
- a[-1] # 字符串最后一个字符
- b[-1] # 列表最后一个元素
- c[-1] # 元组最后一个元素
按索引读取元素这个操作,字符串、列表和元组完全相同。
(2) 切片
- a[1: 4] # 读取字符串第2、3、4个字符
- b[1: 4] # 读取列表第2、3、4个元素
- c[1: 4] # 读取元组第2、3、4个元素
- a[: 4] # 读取字符串前4个字符
- b[: 4] # 读取列表前4个元素
- c[: 4] # 读取元组前4个元素
- a[-3: ] # 读取字符串最后3个字符
- b[-3: ] # 读取列表最后3个元素
- c[-3: ] # 读取元组最后3个元素
切片这个操作,字符串、列表和元组完全相同。
(3) 循环迭代
- for char in a: # 对字符串进行迭代
- print(char)
- for element in b: # 对列表进行迭代
- print(element)
- for element in c: # 对元组进行迭代
- print(element)
循环迭代这个操作,字符串、列表和元组完全相同。
(4) 倒序输出
- a[::-1] # 把字符串倒序
- b[::-1] # 把列表倒序
- c[::-1] # 把元组倒序
运行效果如下图所示:
倒序输出这个操作,字符串、列表和元组完全相同。
(5) 元素是否在里面
- if 'x' in a:
- print('字符 x 在字符串中!')
- if 3 in b:
- print('元素 3 在列表中!')
- if 3 in c:
- print('元素 3 在元组中!')
判断一个字符是否在字符串中,或者判断一个元素是否在列表、元组中,操作完全相同。
(6) 查找索引
- a = 'hello'
- index = a.index('e')
- print('字符e 在字符串中的索引为:', index)
- b = ['kingname', 'pm', 'ui', 'spider']
- index = b.index('pm')
- print('元素pm在列表中的索引为:', index)
- c = ('kingname', 'pm', 'ui', 'spider')
- index = c.index('pm')
- print('元素pm在元组中的索引为:', index)
运行效果如下图所示:
查询子字符串在字符串中的索引,或者根据元素查询其在列表、元组中的索引,操作完全相同。
(7) 统计出现次数
- a = 'helloworld'
- num = a.count('l')
- print('字符 l 在字符串中出现的次数为:', num)
- b = ['kingname', 'pm', 'ui', 'pm', 'spider']
- num = b.count('pm')
- print('元素 pm 在列表中出现的次数为:', num)
- c = ('kingname', 'pm', 'ui', 'pm', 'spider')
- num = c.count('pm')
- print('元素pm 在元组中出现的次数为:', num)
运行效果如下图所示:
统计出现次数,这个操作对字符串、列表和元组完全相同。
(8) 拼接操作
- a = 'hello'
- b = 'world'
- print(a + b)
- a = [1, 2, 3]
- b = [4, 5, 6]
- print(a + b)
- a = (1, 2, 3)
- b = (4, 5, 6)
- print(a + b)
运行效果如下图所示:
加号拼接这个操作,字符串、列表和元组完全相同。
总结在“读”这个操作上面,字符串、列表、元组是完全相同的,只要掌握了其中一个,另外两个自动就知道怎么操作了。这就叫做类比。
先学习了相同的操作,再来分别学习每个数据结构各自独特的操作,这样才能做到事半功倍,举一反三。
令人遗憾的是,目前市面上绝大部分的 Python 教程,都没有做到这一点。