05 List

儲存資料的方式有很多種,特別是當有很多資料的時候
要存很多個 character 可以把他們放在一個 string 裡,要取其中一個時,用 index 或 for loop 配合 index 就可以得到了

例如七個小朋友 A~G 抽報告順序,就可以寫
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 小朋友要第一個報告囉




上次也學了 tuple,一個 function 一次 return 不只一個值就是自動啟用 tuple

例如要在二維座標系統中產生一個點:
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) 一樣歐



List

接下來介紹另一種資料型態,也就是 list
List顧名思義就是一個清單,由中括號 [ ] 構成
每一項內容物由逗號區隔

像 mylist = [1, 2, 3, 4]

List 也是可以被 index 的,例如

mylist = [1, 2, 3, 4]
print(mylist[1])
print(mylist[1:3])

我們可以查找,像這樣

mylist = [1, 2, 3, 4]
if 2 in mylist:
    print("there is 2")

print(mylist)

那前面說過的 Mutable 跟 Immutable ,
list 就是 mutable 的最佳代表!

我們可以

mylist = [1, 2, 3, 4]
mylist[2] = 10

直接修改裡面的第幾項

mylist = [1, 2, 3, 4]
mylist[2:2] = [2.5, 2.6, 2.7]

或是也跟 string 一樣可以相加

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 最後面加入新的一項,像這樣

mylist = [1, 2, 3, 4]
mylist.append(5)

另一個就是 pop ,就是刪掉 list 裡的最後一項
像這樣

mylist = [1, 2, 3, 4]
mylist.pop()

也可以指定刪第幾個,像這樣

mylist = [1, 2, 3, 4]
mtlist.pop([0])

另外,記得這些都可以跟前面學過的東西結合,
試著解釋下面的程式在幹嘛吧

mylist = [1, 2, 3, 4]
for i in range(len(mylist)):
    mylist[i] = 0
最後一個小練習

寫一個 function ,可以填入一個 list,這個 function 會讀取這個list 的每一項,如果含有 0 就return True,否則 return False

List Comprehension

補充,我最喜歡的,list 可以用很花俏的方式寫,
但不一定需要,(真的
寫程式最重要的就是看得懂

但還是可以講一下XD
規則如下
list = [ <expression> for <iteration> in <sequence> if <condition> ]

例如原本的程式長這樣

mylist = []
for i in range(10):
    if i % 2 == 0:
        mylist.append(i)

就可以改成這樣

mylist = [ i for i in range(10) if i % 2 == 0]

帥吧XD