{%hackmd @dzif24x25/yRBnguqQQl-2ylH1j5h0cg %}
# 串列(List)
---
## `list`介紹
在Python中,串列(list)除了可以儲存相同元素的物件,串列也可以儲存不同元素的物件。
---
### 程式碼:
```python
mylist = [元素1, 元素2, ... , 元素n]
```
---
### 範例:
```python
a_list = ['Hello', 123, True]
```
---
## `list`的存取
---
### 程式碼:
```python
list名稱[索引值(index)]
```
---
### 範例:
```python
scores[2]
temperature[15]
is_passed[5]
```
---
註:若索引值<0,則代表倒數第n
範例:
```python
scores[-3] #scores中倒數第3個元素
```
---
### 串列解包:
```python=
scores = [100, 89, 74, 70, 40]
s1, s2, s3, s4, s5 = scores
print(s1, s2, s3, s4, s5)
```
輸出結果:
```
100 89 74 70 40
```
---
### 搭配`for`迴圈:
```python=
scores = [100, 89, 74, 70, 40]
for score in scores:
print(score, end=' ')
```
輸出結果:
```
100 89 74 70 40
```
---
## 串列切片(list slices)
在設計程式時,常會需要取得串列的部分片段,又稱「子串列」,這時就可以使用串列切片
---
### 格式:
| 格式 | 說明 |
|-|-|
| `mylist[start:end]` | `start` ~ `end-1` |
| `mylist[:end]` | 開頭 ~ `end-1` |
| `mylist[:-n]` | 開頭 ~ 倒數第`n`(不含) |
| `mylist[start:]` | `start` ~ 結尾 |
| `mylist[-n:]` | 倒數第`n` ~ 結尾 |
| `mylist[:]` | 開頭 ~ 結尾 |
---
| 格式 | 說明 |
|-|-|
| `mylist[start:end:step]` | `start` ~ `end-1`,間隔`step` |
---
範例:
```python=
mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('mylist[3:7] =', mylist[3:7])
print('mylist[:7]) =', mylist[:7])
print('mylist[:-4] =', mylist[:-4])
print('mylist[-3:] =', mylist[-3:])
print('mylist[:] =', mylist[:])
print('mylist[::-1] =', mylist[::-1]) #反轉串列
print('mylist[3:7:1] =', mylist[3:7:1])
```
---
輸出結果:
```
mylist[3:7] = [4, 5, 6, 7]
mylist[:7]) = [1, 2, 3, 4, 5, 6, 7]
mylist[:-4] = [1, 2, 3, 4, 5, 6]
mylist[-3:] = [8, 9, 10]
mylist[:] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mylist[::-1] = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
mylist[3:7:1] = [4, 5, 6, 7]
```
---
## 串列長度計算
---
### len()函式:
可以使用len()函式來計算一串列中的元素數量
---
### 範例:
```python=
scores = [100, 89, 74, 70, 40]
print(len(scores))
```
輸出結果:
```
5
```
---
## 串列新增元素
---
### 程式碼:
```python
串列.append(元素)
```
---
### 範例:
```python=
names = ['Anthony', 'John']
names.append('Jenny')
print(names)
```
輸出結果:
```
['Anthony', 'John', 'Jenny']
```
---
## 串列插入元素
---
### 程式碼:
```python
串列.insert(索引值, 元素)
```
---
### 範例:
```python=
names = ['Anthony', 'John']
names.insert(1, 'Jenny')
print(names)
```
輸出結果:
```
['Anthony', 'Jenny', 'John']
```
---
## 串列刪除元素
---
### del:
```python
del 串列[i] #刪除索引值i的串列元素
del 串列[start:end] #刪除start到end-1的串列元素
del 串列[start:end:step] #以間隔step,刪除start到end-1
```
---
### 範例:
```python=
phones = ['Apple', 'Samsung', 'Nokia', 'Google']
print('Original:', phones)
del phones[2]
print('Deleted:', phones)
```
### 輸出結果:
```
Original: ['Apple', 'Samsung', 'Nokia', 'Google']
Deleted: ['Apple', 'Samsung', 'Google']
```
---
### remove()
若不知道要刪除元素的索引值,可以使用`remove()`函式
---
```python
串列.remove(元素)
```
---
### 範例:
```python=
names = ['Anthony', 'John', 'Jenny']
names.remove('Anthony')
print(names)
```
### 輸出結果
```
['John', 'Jenny']
```
---
若找不到元素會發生錯誤:
```
ValueError
list.remove(x): x not in list
```
---
## 串列相加
在Python中,可以使用`+`和`+=`來執行串列相加
---
### 範例:
```python=
phones1 = ['Apple', 'Samsung', 'Nokia', 'Google']
phones2 = ['HUAWEI', 'OPPO', 'OnePlus', 'Vivo', 'Xiaomi']
phones = phones1 + phones2
print(phones)
phones1 += phones2
print(phones1)
```
輸出結果:
```
['Apple', 'Samsung', 'Nokia', 'Google', 'HUAWEI', 'OPPO', 'OnePlus', 'Vivo', 'Xiaomi']
['Apple', 'Samsung', 'Nokia', 'Google', 'HUAWEI', 'OPPO', 'OnePlus', 'Vivo', 'Xiaomi']
```
---
## 串列*數字
在Python中,串列*數字 代表串列重複幾次
---
### 範例:
```python=
names = ['Anthony', 'John']
print(names*3)
```
輸出結果:
```
['Anthony', 'John', 'Anthony', 'John', 'Anthony', 'John']
```
---
## 串列顛倒
---
### 利用串列切片
```python
串列 = 串列[::-1] #使用串列切片不會改變串列本身
```
### 利用reverse()
```python
串列.reverse() #使用reverse()會使串列改變
```
---
## 串列排序
---
### 串列.sort():
程式碼:
```python
串列.sort(reverse=...)
```
* reverse:
預設為`False`
若為`True`,則會由大至小排序
若為`False`,則會由小至大排序
---
```python
grades = [100, 81, 61, 92, 20, 37]
grades.sort()
print(grades)
```
輸出結果:
```
[20, 37, 61, 81, 92, 100]
```
---
### sorted()
和`串列.sort()`相同,但不會改變原串列內容
---
程式碼:
```python
新串列 = sorted(舊串列, reverse=...)
```
* reverse:
預設為False
若為True,則會由大至小排序
若為False,則會由小至大排序
---
```python
grades = [100, 81, 61, 92, 20, 37]
grades = sorted(grades, reverse=True)
print(grades)
```
輸出結果:
```
[100, 92, 81, 61, 37, 20]
```
---
## 串列統計資料
---
### 最大值max():
範例:
```python=
grades = [100, 81, 61, 92, 20, 37]
print(max(grades))
```
輸出結果:
```
100
```
---
### 最小值min():
範例:
```python=
grades = [100, 81, 61, 92, 20, 37]
print(min(grades))
```
輸出結果:
```
20
```
---
### 總和sum():
範例:
```python=
grades = [100, 81, 61, 92, 20, 37]
print('總和:', sum(grades))
print('平均:', sum(grades) / len(grades))
```
輸出結果:
```
總和: 391
平均: 65.16666666666667
```
{"metaMigratedAt":"2023-06-17T23:08:29.348Z","metaMigratedFrom":"YAML","title":"串列(List)","breaks":true,"contributors":"[{\"id\":\"b1b336d5-b75d-4c19-b4f6-fccd69a2a9f2\",\"add\":4838,\"del\":24}]"}