---
# System prepended metadata

title: 'W05: 3/14'

---

W05: 3/14
===

### [Python列表 (Python Lists)](https://www.w3schools.com/python/python_lists.asp)

* Python 編程語言中有四種集合數據類型：
  > `List`是一個有序、可變的集合。允許重複元素。
  > `Tuple`是一個有序、不可變的集合。允許重複元素。
  > `Set`是一個無序、不可變、無索引的集合。不允許重複元素。
  > `Dictionary`是一個有序、可變的集合。不允許重複元素。
* 列表用於將多個元素存儲在單個變量中。
* 列表由中括號`[]`創建
* 搜索列表項時，第一項的編號為`0`，第二項的編號為`1`，以此類推。
* 負數編號意味著從列表末端開始，倒數第一項的編號為`-1`，倒數第二項的編號為`-2`，以此類推。

---

#### [Python - 訪問列表項 (Access List Items)](https://www.w3schools.com/python/python_lists_access.asp)

* 切片：取得特定範圍的元素。如`[3:6]`，將搜索編號3~5的所有元素
  > 如`[:6]`，將搜索最前項~編號5的所有元素
  > 如`[3:]`，將搜索編號3~最末項的所有元素
* 新增 `lst.append()`
* 刪除 `lst.remove()`
* 清空 `lst.clear()`
* 排序 `lst.sort()`
* 總和 `sum()`
* 項數 `len()`
* 最大值 `max()`
* 最小值 `min()`
* 查找元素 `if "__" in`
  * 範例：查找`Hanoi`有無出現於列表中
     ```
     thislist = ["Beijing", "Hanoi", "Hong Kong", "Macau", "Seoul", "Taipei", "Tokyo", "Ulaanbaatar"]
     if "Hanoi" in thislist:
       print("Yes, 'Hanoi' is in the cities list")
     ```

---

Ex1：
```
lst = ["a","b","c","d","e"]
lst[2] = "x"  #將列表編號2的元素設為"x"
lst.append("c")  #於列表最後附加"c"
lst.remove("b")  #移除列表第一個"b"
print(lst)
⇒
['a', 'x', 'd', 'e', 'c']
```

Ex2：
```
lst = ["a","b","c","d","e"]
for i in lst: #針對lst中的每個元素i(即用i代表每個元素)
 print(i)
⇒
a
b
c
d
e
```

---

### [Python for迴圈 (Python For Loops)](https://www.w3schools.com/python/python_for_loops.asp)

* for迴圈：`for x in ___:`
* for迴圈的內容需要縮排
* 利用for迴圈，我們將可以針對`List`、`Tuple`、`Set`等集合數據中的每個項目各執行一次。
* 除集合數據外，字符串同樣也是for迴圈的運用對象。
  * 範例：走訪字符串中的字符
    ```
    for x in "Ryukyu":
     print(x)  #記得要縮排！
    ⇒
    R #大小寫照舊
    y
    u
    k
    y
    u
    ```

---

#### 休息指令 (The break Statement)

若要停止for迴圈，使用`break`語句，即可在for迴圈走訪所有元素之前停止。

範例：在`x`為`"Euro"`時結束迴圈
```
currencies = ["Dollar", "Euro", "Yen", "Pound"]
for x in currencies:
  print(x)
  if x == "Euro":
    break
```

---

#### 繼續指令 (The continue Statement)

使用`continue`語句，可以直接結束for迴圈的當前走訪，並繼續下一個。

範例：不要印出`"Euro"`
```
currencies = ["Dollar", "Euro", "Yen", "Pound"]
for x in currencies:
  if x == "Euro":
    continue
  print(x)
```

---

#### 範圍函數 (The `range()` Function)

* 於`range()`函數框內輸入第一個參數，將獲得一個數字序列，起始值為0，遞增值為1，並以指定的參數結束。
* `range()`函數一般默認起始值為0，但是可以通過添加第二個參數來指定起始值
* `range()`函數一般默認遞增值為1，但是可以通過添加第三個參數來指定遞增值

範例：
```
for x in range(2, 23, 3):
  print(x)
```

---

#### for迴圈中的Else (Else in For Loop)

`Else`可置於for迴圈之下，用於指定for迴圈結束後欲執行的指令。

範例：
```
for x in range(4, 9):
  print(x)
else:
  print("Finally finished!")
```

---

#### 鑲嵌迴圈 (Nested Loops)

可在for迴圈裡嵌入另一個for迴圈，此時“內迴圈”將在“外迴圈”的每次走訪中執行一次。

範例：
```
adj = ["brown", "fragrant"]
food = ["coffee", "toffee"]

for x in adj:
  for y in food:
    print(x, y)
```

---

#### 跳過指令 (The pass Statement)

因為for迴圈的內容不能為空白，所以遇到空白內容的for迴圈時，放入`pass`語句以避免出錯。

範例：
```
for x in [0, 1, 2]:
  pass
```

---

Ex3:
```
#找出串中大於90000的元素
#換句話說，我需要去走訪串列
#換句話說，我需要：針對串列lst的每個元素x，找出大於90000的所有元素
lst = [60474,17966,96949,7521,93184,13290,80559,23407,32934,71592,53071]
for x in lst:
 if x > 0 and x < 40000:
  print("第一組")
  print(x)
  
 elif x >40000 and x < 80000:
  print("第二組")
  print(x)

 elif x > 80000:
  print("第三組")
  print(x)
```

Ex4:
```
a = [1,3,2,5,4]
b = 0 #總和
for x in a:
 print( "x=" )
 print(x)
 b = +b+x
 print( "b=" )
 print(b)
 print( "----------" )
print(b)
```

---

### `作業`

[用for迴圈算出lst串列的總和、最大值](https://colab.research.google.com/drive/1FfPW2V7dhcVDEc4T0m8wrlDV9UxMKKWv)