---
# System prepended metadata

title: 05 List

---

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