本章知識點 :> 列表
- 復(fù)習一下
p0總結(jié)在線看
p1總結(jié)在線看
p4總結(jié)在線看
北京地鐵1號線

復(fù)習:函數(shù)定義
-
y = ax+b這是數(shù)學里的一個直線函數(shù),現(xiàn)在用Python來實現(xiàn)這個函數(shù)(假設(shè)a=2,b=1) - 這個算法的輸入是什么?輸出是什么?
- 輸入:x
- 輸出: y
- 還記得用def定義函數(shù)嗎?
def line(x):
????a = 2
????b = 1
????y = a * x + b
????return y
y1 = line(4)
print(y1)
y2 = line(5)
print(y2)
- 易錯點:a和b要定義在函數(shù)里
- 易錯點:函數(shù)一定要return y
試一下 在線Python
- 如果a 和 b定義在函數(shù)外面,又想再函數(shù)里使用,可以用
global方法 - 思考:為什么函數(shù)內(nèi)的a b 和函數(shù)外的 a b默認不同步?(如果函數(shù)內(nèi)變量名和函數(shù)外想通,會引起一個很大的問題,
- 比如我們調(diào)用了很多的系統(tǒng)函數(shù)和其他人的函數(shù),非常容易起一個變量名字和他們函數(shù)內(nèi)的相同,那就天下大亂了?。?/li>
- 所以:每個函數(shù)內(nèi)的變量是自成一體的,如果要再函數(shù)內(nèi)用外面的變量,可以用
global方法
a = 2
b = 1
def line(x):
????global a,b
????y = a * x + b
????return y
試一下 在線Python
列表
- 先復(fù)習一下之前我們掌握的變量類型哦
整數(shù)浮點數(shù)字符串布爾型(TrueFalse)None(None表示什么也沒有) - 這些變量類型叫做基礎(chǔ)變量類型。
- 現(xiàn)在要說的列表,是組合變量類型。
-
組合是什么意思呢?


- 如果一個變量是 一顆
樹木那么 一個組合就是一片森林 - 把
代碼塊取一個名字,變成函數(shù) - 把一組相關(guān)的
變量合到一起,取一個名,變成列表 - 比如:一年級一班有5個人,分別是小明,小紅,小飛,小黃,小麗
xiaoming = '小明‘
xiaohong = '小紅‘
xiaofei = '小飛‘
xiaohuang = '小黃‘
xiaoli = '小麗‘ - 我們可以用
列表一年級一班來組合表示
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
print(yinianyiban)
試一下 在線Python
-
語法是這樣的:
- 易錯點:用
[ ]表示列表 - 易錯點:在列表里也可以寫變量名
- 易錯點:在列表里的變量可以是不同類型
a = 1
list = [a, 2,3,4, "hello world"]
print(list)
試一下 在線Python
- 這樣說還不夠通透,其實
列表里還可以放列表
list = [['小明’, 20],['小紅', 21],['小飛', 20]] - 在這個list里,分別存儲了3個list,內(nèi)層的list由 姓名和年齡組合
list = [
['小明’, 20],
['小紅', 21],
['小飛', 20]
] - 這樣寫更清楚一點了
- 兩層的list其實表達的是
表格結(jié)構(gòu)
| 姓名 | 年齡 |
|---|---|
| 小明 | 20 |
| 小紅 | 21 |
| 小飛 | 20 |
| .. | .. |
- 你看看是不是表格結(jié)構(gòu)?
試一下 在線Python
列表訪問
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
- 看這個列表,現(xiàn)在有一個問題,就是怎么單獨取出 某一個
元素(就是列表里的某個變量) - 解決這個問題之前,需要把列表的隱身部分畫出來

- 有沒有注意到,列表下方多了
0, 1, 2, 3, 4 .. - 這些數(shù)字表示的是列表元素的
下標(其實意思就是位置) 注意:下標從0開始 - 我們可以用
下標來訪問元素 - 讀取 ‘小明'
xm = yinianyiban[0] #下標是0 ,就用0訪問
print(xm)
試一下 在線Python
- 讀取 ’小黃'
xh = yinianyiban[3] #下標是3,就用3訪問
print(xh)
試一下 在線Python
可以讀取,也可以賦值哦~
現(xiàn)在把'小麗'改成 '小李'
yinianyiban[4] = '小李'
print(yinianyiban)
試一下 在線Python只要
簡單重復(fù)的把列表里的元素分別讀取和改變,你就會理解這種方法思考:如果讀寫表格里的數(shù)據(jù)?
list = [
['小明’, 20],
['小紅', 21],
['小飛', 20]
]
xm = list[0][0]
print(xm)
xm_age = list[0][1]
print(xm_age)
試一下 在線Python請先在線寫一寫之后,再思考為什么用
[0][0]來訪問。
列表函數(shù)
- 列表有一套自己的函數(shù)
- 我們只介紹3個
- 它們解決3個常見問題
- 假設(shè)有個一個列表
yinianyiban = ['小明‘,'小紅‘,'小飛‘,'小黃‘,'小麗‘]
- 1 / 現(xiàn)在只知道有個人叫
'小紅', 如何根據(jù)‘小紅'(元素的值),怎么計算它的下標值
xh = ’小紅‘
xb = yinianyiban.index(xh) #用index函數(shù)
試一下 在線Python - 易錯點:列表相關(guān)的函數(shù)調(diào)用方法是用 列表名.函數(shù) (用.來連接), 記住它
- 2 / 現(xiàn)在班里來了新同學 ’小新' ,怎么加入列表
xx = '小新'
yinianyiban.append(xx) - 用append函數(shù)
- 3 / 現(xiàn)在有個同學 '小飛' 轉(zhuǎn)校了,怎么從列表刪除
del yinianyiban[2] - 小飛的下標是2,用
del 元素的方法來刪除元素
4 / 請計算一下列表里元素總數(shù)
total = len(yinianyiban)len函數(shù)(之前介紹過)
別問我這些功能為什么這么寫,把他們記住就好。
試一下 在線Python
for 循環(huán)
- 我們有一個列表,遍歷這個列表是一種常見的需求 (從第一個元素到最后一個元素挨個取出)
- 思考一下:用
while循環(huán)如何做列表遍歷?
輸入:列表
輸出:挨個打印列表元素
-
print(list[n])打印第n個元素,我們很快找到了重復(fù)的動作
image.png 變成代碼:
list = [1,2,3,4,5]
n = 0
total = len(list)
while n < total:
????print(list[n])
????n = n + 1
試一下 在線Python
- 現(xiàn)在,我們要介紹新的辦法(更簡單的遍歷一個列表)
- 直接上語法:
for i in list:
????print(i)
-
for循環(huán),其實語法不用過多解釋,for xx in xx表達的意思就是從列表里循環(huán)取出 for i in list:- 注意這里的i,i是list里的元素,在循環(huán)過程中,i會依次等于 list[0],list[1],....
試一下 在線Python -
for循環(huán)是更加簡便的遍歷循環(huán)寫法。 - 還記得我說的 只有 P0 P1 是編程基礎(chǔ)嗎,其實后面的知識都是為了簡化,簡便,方便~~
綜合運用

有沒有注意到,我把地鐵1號線用一個紅框框起來
你猜的沒錯,看見這個紅框我們立即就能想到
列表,這就是天生的列表結(jié)構(gòu)?。?/p>問題:我們的1號線地鐵問題,實現(xiàn)路人問路,并且通過打印
"右走1站"
"右走1站"
...
或者
"左走1站"
"左走1站"
...
來指路。(考慮特殊情況如果 用戶要去的就是 王府井 站,那么請打印 "現(xiàn)在出站")
最新要求:用戶只要告知站名(如 ”西單“)就可以問路,不需要告訴站號(如 11)
思考一下,站號本來就是不必須的。
"站名轉(zhuǎn)站號算法"輸入:站名 輸出 :站號
看一下原來的寫法(我用函數(shù)表示了)
def name2num(end):
????#"站名轉(zhuǎn)站號算法"
????if end == '四惠東':
????????end_num = 1
????if end == '四惠':
????????end_num = 2
????if end == '大望路':
????????end_num = 3
????... #if太多我不寫了
????return end_num主程序的代碼:
start = '?'#具體執(zhí)行時填寫
start_num = 0
end = '?' #具體執(zhí)行時填寫
end_num = 0 #默認是0,請用算法計算
#注意,start和end可以算出num
start_num = name2num(start)
end_num = name2num(end)
fangxiang = ''
zou_num = 0
if start_num == end_num:
????print("現(xiàn)在出站")
if start_num < end_num:
????fangxiang = '右'
????zou_num = end_num - start_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
if start_num > end_num:
????fangxiang = '左'
????zou_num = start_num - end_num
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個空格
????????a = a + 1
試一下 在線Python
-
"站名轉(zhuǎn)站號算法"現(xiàn)在,我們用一個列表來實現(xiàn)這個算法
list = ['四惠東','四惠','大望路','國貿(mào)','永安里','建國門','東單','王府井','天安門東','天安門西','西單','復(fù)興路','南禮士路','木樨地'] - 輸入:list,站名
- 輸出:站號(思路,用list的index方法取隱含的下標作為站號)
def name2num(list, name):
????i = list.index(name)
????return i+1 #是不是i+1就是原來的站號!
試一下 在線Python
- 秒殺!
下一章會先復(fù)習 列表 的知識,不用擔心今天的新知識太多~
p5 知識點總結(jié):

目錄
0基礎(chǔ)教程金哥Python自學筆記P0~變量與運算
0基礎(chǔ)教程金哥Python自學筆記P1~循環(huán)與控制

