# 05 List 儲存資料的方式有很多種,特別是當有很多資料的時候 要存很多個 character 可以把他們放在一個 string 裡,要取其中一個時,用 index 或 for loop 配合 index 就可以得到了 ::: spoiler 例如七個小朋友 A~G 抽報告順序,就可以寫 ``` python import random def generate_order(names): # input argument, names, 代表一個string裝了連續的名字 results = "" #抽籤結果 for i in names: #names 裡有幾的 char 就會跑幾次,代表每一次跑都是抽該個小朋友的順序 order = random.randrange(7) #用 random 抽出該小朋友的上台順序 while (str(order) in results): #如果這個順序已經被抽過了,那就繼續抽 order = random.randrange(7) results = results + str(order) #抽完之後把結果放到 results 裡,接著繼續下一次 loop return results # foor loop 結束之後讓這個 function 回傳 results def main(): # good practice,主程式裝 main function 裡 r = generate_order("ABCDEFG") #所以 r 就會是generate_order這個 function 跑完時的 results 的值 print(r) main() #記得要叫 main function,不然整個程式不會跑 ``` 如果最後印出來的是 1645023,就代表 E 小朋友要第一個報告囉 ::: <br></br> 上次也學了 tuple,一個 function 一次 return 不只一個值就是自動啟用 tuple :::spoiler 例如要在二維座標系統中產生一個點: ``` python import random def generate_dot(minX, maxX, minY, maxY): #input argument 有四個,分別是 x 與 y 的最大最小值 x = random.randrange(minX, maxX) #產生 x y = random.randrange(minY, maxY) #產生 y return x, y #最後回傳這一對結果 def main(): # good practice,主程式裝 main function 裡 d = generate_dot(-10, 10, -10, 10) print(d) main() #記得要叫 main function,不然整個程式不會跑 ``` 得到的印出來的就會像 (5, 3) 一樣歐 ::: <br></br> ## List 接下來介紹另一種資料型態,也就是 list List顧名思義就是一個清單,由中括號 [ ] 構成 每一項內容物由逗號區隔 像 mylist = [1, 2, 3, 4] List 也是可以被 index 的,例如 ``` python mylist = [1, 2, 3, 4] print(mylist[1]) print(mylist[1:3]) ``` 我們可以查找,像這樣 ```python mylist = [1, 2, 3, 4] if 2 in mylist: print("there is 2") ``` print(mylist) 那前面說過的 Mutable 跟 Immutable , list 就是 mutable 的最佳代表! 我們可以 ``` python mylist = [1, 2, 3, 4] mylist[2] = 10 ``` 直接修改裡面的第幾項 或 ``` python mylist = [1, 2, 3, 4] mylist[2:2] = [2.5, 2.6, 2.7] ``` 或是也跟 string 一樣可以相加 ``` python mylist1 = [1, 2, 3, 4] mylist2 = [4, 5, 6, 7] print(mylist1 + mylist2) ``` 事實上,string 就是一個純由 char 組成的 list 的概念,只是因為太常用了,所以 character 就被單獨拿出來創了一個 type 叫 string 很多語言裡(像 C, C++)都是沒有 string 的,只有 character array array,就是 list,只有 python 叫這種一串東西 list,其他語言們都是叫 array (就跟 member function 硬要叫 methods 一樣(( ## list.appned Python 的 list 也有很多用點 `.` 叫出來的功能, 可以參考 https://docs.python.org/3/tutorial/datastructures.html 下面介紹兩個最常用的 `append` 就是在 list 最後面加入新的一項,像這樣 ``` python mylist = [1, 2, 3, 4] mylist.append(5) ``` 另一個就是 `pop` ,就是刪掉 list 裡的最後一項 像這樣 ``` python mylist = [1, 2, 3, 4] mylist.pop() ``` 也可以指定刪第幾個,像這樣 ``` python mylist = [1, 2, 3, 4] mtlist.pop([0]) ``` 另外,記得這些都可以跟前面學過的東西結合, 試著解釋下面的程式在幹嘛吧 ``` python mylist = [1, 2, 3, 4] for i in range(len(mylist)): mylist[i] = 0 ``` :::spoiler 最後一個小練習 寫一個 function ,可以填入一個 list,這個 function 會讀取這個list 的每一項,如果含有 0 就return True,否則 return False ::: ## List Comprehension 補充,我最喜歡的,list 可以用很花俏的方式寫, 但不一定需要,(真的 寫程式最重要的就是看得懂 但還是可以講一下XD 規則如下 list = [ <expression> for <iteration> in <sequence> if <condition> ] 例如原本的程式長這樣 ``` python mylist = [] for i in range(10): if i % 2 == 0: mylist.append(i) ``` 就可以改成這樣 ``` python mylist = [ i for i in range(10) if i % 2 == 0] ``` 帥吧XD <br></br> :::info [BACK](https://hackmd.io/@lhsueh1/python101) :::