《金哥百變Python零基礎(chǔ)教程5》~列表

本章知識點 :> 列表

北京地鐵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ù) 字符串 布爾型 (True False) 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)在有一個問題,就是怎么單獨取出 某一個元素 (就是列表里的某個變量)
  • 解決這個問題之前,需要把列表的隱身部分畫出來
image.png
  • 有沒有注意到,列表下方多了 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號線
  • 有沒有注意到,我把地鐵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é):


image.png
目錄

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容