# 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)
:::