什么叫做類比,為什么有些 Python 入門教程結(jié)構(gòu)不合理
想必關(guān)注未聞 Code的同學(xué)或多或少都在網(wǎng)上看過(guò)各種各樣的 Python 入門教程。這些教程在講 Python 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,一般是按照下面這個(gè)模式來(lái)講的:
- 數(shù)字、字符串、浮點(diǎn)數(shù)
- 列表
- 字典
- 集合
- …
這個(gè)結(jié)構(gòu)雖然說(shuō)是中規(guī)中矩由淺入深,但是它并沒有讓讀者做到類比學(xué)習(xí)觸類旁通。
所謂類比
為什么這樣說(shuō)呢?因?yàn)檫@些教程的教學(xué)模式,使得讀者不容易發(fā)現(xiàn)字符串、列表、元組的相同之處。
我們從“讀”這個(gè)角度來(lái)看看這三個(gè)數(shù)據(jù)結(jié)構(gòu)。假設(shè)有一個(gè)字符串叫做a,有一個(gè)列表叫做b,有一個(gè)元組叫做c。那么大家請(qǐng)看如下的操作。
(1) 按索引讀取元素
- a[0] # 字符串第一個(gè)字符
- b[0] # 列表第一個(gè)元素
- c[0] # 元組第一個(gè)元素
- a[3] # 字符串第4個(gè)字符
- b[3] # 列表第4個(gè)元素
- c[3] # 元組第4個(gè)元素
- a[-1] # 字符串最后一個(gè)字符
- b[-1] # 列表最后一個(gè)元素
- c[-1] # 元組最后一個(gè)元素
按索引讀取元素這個(gè)操作,字符串、列表和元組完全相同。
(2) 切片
- a[1: 4] # 讀取字符串第2、3、4個(gè)字符
- b[1: 4] # 讀取列表第2、3、4個(gè)元素
- c[1: 4] # 讀取元組第2、3、4個(gè)元素
- a[: 4] # 讀取字符串前4個(gè)字符
- b[: 4] # 讀取列表前4個(gè)元素
- c[: 4] # 讀取元組前4個(gè)元素
- a[-3: ] # 讀取字符串最后3個(gè)字符
- b[-3: ] # 讀取列表最后3個(gè)元素
- c[-3: ] # 讀取元組最后3個(gè)元素
切片這個(gè)操作,字符串、列表和元組完全相同。
(3) 循環(huán)迭代
- for char in a: # 對(duì)字符串進(jìn)行迭代
- print(char)
- for element in b: # 對(duì)列表進(jìn)行迭代
- print(element)
- for element in c: # 對(duì)元組進(jìn)行迭代
- print(element)
循環(huán)迭代這個(gè)操作,字符串、列表和元組完全相同。
(4) 倒序輸出
- a[::-1] # 把字符串倒序
- b[::-1] # 把列表倒序
- c[::-1] # 把元組倒序
運(yùn)行效果如下圖所示:
倒序輸出這個(gè)操作,字符串、列表和元組完全相同。
(5) 元素是否在里面
- if 'x' in a:
- print('字符 x 在字符串中!')
- if 3 in b:
- print('元素 3 在列表中!')
- if 3 in c:
- print('元素 3 在元組中!')
判斷一個(gè)字符是否在字符串中,或者判斷一個(gè)元素是否在列表、元組中,操作完全相同。
(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)
運(yùn)行效果如下圖所示:
查詢子字符串在字符串中的索引,或者根據(jù)元素查詢其在列表、元組中的索引,操作完全相同。
(7) 統(tǒng)計(jì)出現(xiàn)次數(shù)
- a = 'helloworld'
- num = a.count('l')
- print('字符 l 在字符串中出現(xiàn)的次數(shù)為:', num)
- b = ['kingname', 'pm', 'ui', 'pm', 'spider']
- num = b.count('pm')
- print('元素 pm 在列表中出現(xiàn)的次數(shù)為:', num)
- c = ('kingname', 'pm', 'ui', 'pm', 'spider')
- num = c.count('pm')
- print('元素pm 在元組中出現(xiàn)的次數(shù)為:', num)
運(yùn)行效果如下圖所示:
統(tǒng)計(jì)出現(xiàn)次數(shù),這個(gè)操作對(duì)字符串、列表和元組完全相同。
(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)
運(yùn)行效果如下圖所示:
加號(hào)拼接這個(gè)操作,字符串、列表和元組完全相同。
總結(jié)在“讀”這個(gè)操作上面,字符串、列表、元組是完全相同的,只要掌握了其中一個(gè),另外兩個(gè)自動(dòng)就知道怎么操作了。這就叫做類比。
先學(xué)習(xí)了相同的操作,再來(lái)分別學(xué)習(xí)每個(gè)數(shù)據(jù)結(jié)構(gòu)各自獨(dú)特的操作,這樣才能做到事半功倍,舉一反三。
令人遺憾的是,目前市面上絕大部分的 Python 教程,都沒有做到這一點(diǎn)。