# Python 有序列表的運算 List、Tuple
review:
List不可變動
Tuple可以變動
###### tags: `python`
[澎澎](https://www.youtube.com/watch?v=JLU5oc4_VtA&list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk&index=4)
[參考資料-list](http://yltang.net/tutorial/python/11/)
[參考資料-list 進階](http://kaiching.org/pydoing/py/python-type-list.html)
## List 有序可變動
### 1. 索引基本運用 從0開始
```python=
grade = [50,30,80,60,70];
print(grade[2]);#80
grade[2] = 90;#grade = [50,30,90,60] 更新資料
```
### 2. 存取串列中元素
**利用索引方式取出串列元素**
```python=
numbers = [10, 20, [30, 40, 50]]
print(numbers[1])
print(numbers[2])
print(numbers[2][2])
```
>20
[30, 40, 50]
50
**利用布林運算子 in 判斷是否是成員**
```python=
fruits = ['apple', 'orange', 'banana']
print('apple' in fruits) #True
print('watermelon' in fruits) #False
print('orange' not in fruits) #False
```
**串連 (+) 與重複 (*)**
```python=
fruits = ['apple', 'orange', 'banana']
print(fruits + [6, 7, 8, 9])
print([0]*4)
```
>['apple', 'orange', 'banana', 6, 7, 8, 9]
[0, 0, 0, 0]
**切片 (slice)**
```python=
aList = [1, 2, 3, 4, 5, 6]
print(aList[1:3]) # 第 1 到第 2 個
print(aList[:4]) # 第 0 到第 3 個
print(aList[3:]) # 第 3 個到最後
print(aList[:]) # 全部
```
>[2, 3]
[1, 2, 3, 4]
[4, 5, 6]
[1, 2, 3, 4, 5, 6]
### 3. 連續刪除、新增資料
**連續取資料同字串的語法 用 :
刪除的方法用 =[]**
用法:
> 要刪除的資料 = []
```python
grade = [50,30,80,60,70];
grade[1:3]=[];#grade = [50,70]; 連續刪除資料
```
新增 +
```python
grade = [50,30,80,60,70];
grade = grade+[12,33];
#grade = [50,30,80,60,70,12,33];
```
### 4. 取得列表長度 語法 len(列表)
一般串列
```python=
grade = [50,30,80,60,70];
print(len(grade));#5
```
巢狀串列
>串列長度:最上層的元素數量
```python=
numbers = [10, 20, [30, 40, 50]]
print(len(numbers)) #3
```
### 5.複製指標、串列
指標
```python=
a = [1, 2, 3]
b = a
b[0] = 100 # 串列 a 亦更改
print(a)#[100, 2, 3]
```
串列
```python=
a = [1, 2, 3]
b = a[:]
b[0] = 100 # 串列 a 不受影像
print(a) #[1, 2, 3]
```
### 6.刪除元素或串列:del
```python=
aList = [1, 2, 3, 4, 5, 6]
del aList[1] # 刪除第 1 個元素
print(aList)
del aList[1:3] # 刪除第 1 到 2 個元素
print(aList)
del aList # 刪除整個串列
print(aList)
```
>[1, 3, 4, 5, 6]
[1, 5, 6]
NameError: name 'aList' is not defined
### 7. 巢狀
元素是另一個串列
```python=
nestedList = [10, 'Hello', 20.5, [30, 40]]
```
### 8. 進階
#### 內建串列方法
語法: <theList>.<method>(),例如:
a = [4, 2, 3, 1]
a.sort() # [1, 2, 3, 4]
| 方法| 說明 |
| -------- | -------- |
| append(x)|將 x 附加到串列的最後 |
|clear()|清空串列中的所有元素。|
|copy()|回傳串列所有元素的拷貝串列。|
|count(x)|回傳 x 在串列中的總數。|
|extend(i)| 將i串列加到串列的最後|
|index(x, i, j)|回傳 x 的索引值,或索引值 i 到 j 之間元素 x 的索引值。|
|insert(i, x)|在索引值 i 的位置插入元素 x 。|
|pop(i)|回傳並移除串列索引值 i 的元素|
|remove(x)|移除串列中指定的元素 x |
|reverse()|將串列中所有元素倒轉排列。
|sort()|將串列中所有元素按大小順序排列。(會直接改變原本的list)|
|sorted()|將串列中所有元素按大小順序排列。(sorted,他會對元素排序之後,傳回一個排序好的新 list,而原本的 list 則不受影響)|
##### **append(x)**
>append(x) 將 x 附加到串列的最後
```python=
a = []
a.append(1)
print(a)
a.append(2)
print(a) #[1,2]
```
##### **clear()**
>清空串列中的所有元素
```python=
a = [1, 2, 3, 4, 5]
a.clear()
print(a) #[]
```
##### **copy()**
>回傳串列所有元素的拷貝串列
將串列內的元素複製到另一個串列,記憶體位址還是獨立的兩個
```python=
a = [1, 2, 3, 4, 5]
b = a.copy()
print(b) #[1, 2, 3, 4, 5]
```
##### **count(x)**
>回傳 x 在串列中的總數
```python=
a = [3, 2, 1, 1, 2]
print(a.count(1)) #2
print(a.count(3)) #1
```
##### **list.extend(i)**
>將迭代器 i 中的元素擴展為串列的元素,將i加入進串列list中
该方法没有返回值,但会在已存在的列表中添加新的列表内容,i要為串列
```python=
a = [1, 2, 3, 4, 5]
a.extend([1, 2, 3])
print(a) #[1, 2, 3, 4, 5, 1, 2, 3]
```
##### **list.index()**
>index(x, i, j)回傳 x 的索引值,或索引值 i 到 j 之間元素 x 的索引值
```python=
a = [1, 1, 2, 2, 3]
print(a.index(1)) #0
print(a.index(1, 1))#1
print(a.index(2, 3, 4))#3
```
##### **list.insert()**
>insert(i, x) 在索引值 i 的位置插入元素 x
```python=
a = [1, 2, 3]
a.insert(0, 8)
print(a) #[8, 1, 2, 3]
a.insert(2, 8)
print(a) #[8, 1, 8, 2, 3]
```
##### **list.pop()**
>pop() 回傳並移除串列的最後一個元素
```python=
a = [1, 2, 3, 4, 5]
print(a.pop()) #5
print(a) # [1, 2, 3, 4]
print(a.pop()) #4
print(a) #[1,2,3]
```
##### **list.remove()**
>remove(x) 移除串列中指定的元素 x
```python=
a = [1, 2, 3, 2, 3]
a.remove(2)
print(a) #[1, 3, 2, 3]
a.remove(3)
print(a) #[1, 2, 3]
```
##### **list.reverse()**
>reverse() 將串列中所有元素倒轉排列
```python=
a = [1, 2, 3, 4, 5]
a.reverse()
print(a) #[5, 4, 3, 2, 1]
```
##### **list.sort()**
>將串列中所有元素按大小順序排列,且**會直接改變原本的 list 內容**
>反向排序: a.sort(reverse=True)
```python=
a = [4, 2, 3, 1, 5]
a.sort()
print(a)# [1, 2, 3, 4, 5]
a.sort(reverse=True)
print(a) #[5,4,3,2,1]
```
##### **list.sorted()**
>對元素由小到大(預設)排序之後,傳回一個排序好的新 list,而**原本的 list 不受影響**
>反向排序: a.sorted(reverse=True)
```python=
x = [4, 2, 5, 3, 1]
# 排序並建立新的 List
y = sorted(x)
print(y)#[1, 2, 3, 4, 5]
yr = sorted(x,reverse=True)
print(yr) #[5, 4, 3, 2, 1]
```
## Tuple 有序不可變動
1.Tuple資料組建立之後,裏頭的資料就不可以再改變。
```python=
```
2. Tuple資料組中的資料可以有不同的資料型態,甚至可以包含另一個資料組。
3. Tuple資料組可以利用指定運算子把資料分配給多個變數。
4. Tuple資料組顯示的時候,會用圓括弧把資料括起來。
### 基本語法