---
# System prepended metadata

title: CH3 陣列
tags: [Python]

---

###### tags: `Python`
# CH3 陣列
## For迴圈
:::success
**python for 迴圈**
1.用陣列驅動的
2.range(起始,最終,累加) --> 產生的是一個陣列
3.可用range() & 切片技巧達成類似C++的效果
:::
### 語法
```python=
for i in list:
    SATAMENT
```
#### 示意圖
![](https://i.imgur.com/sMxmzIx.png)
### Range
* Range(起始,中止(<),遞增)
* 輸出是一個list
```python=
print(range(0,10,1)
```
> [0,1,2,3,4,5,6,7,8,9]



## 註記
### 常用fuction
![](https://i.imgur.com/ujAdo4W.png)
### 元組tuple
* 不可修改的list
#### 常用方法~交換
```python=
t=x,y
y,x=t
```
## 一維陣列
![](https://i.imgur.com/vdG71yw.png)
### 建立方法
1. `a=list()`
2. `a=[]`
### 動態更動方法
**動態更動: 像是抽屜層數原來五層，我要突然再多增加一層抽屜 or 減少一層抽屜**
1. `list.append(x)`: 把變數x塞到list的最後面
2. `list.insert(i, x)`: 把變數x塞到i這個位置上
3. `list.pop()`: 把list的最後一格丟掉
4. `list.pop(i`: 把list的第i格丟掉
5. `list.remove(x)`: 會把第一個出現的變數x拿掉
6. `list.clear()`: 把list內的資料全部清光光
### 切片
![](https://i.imgur.com/tI15m6r.png)
#### 舉例
```python=
data = [8, 4, 20, 99]
print(data[0:3:1])
```
> [8,4,20]
### 輸入值到陣列之中
#### 做法1
```python=
str = input().split()
num = []
for e in str:
    num.append(int(e))
```
> **後記:** `append()`適用在動態規劃上
#### 做法2
```python=
str = input().split()
num = []
for e in str:
num = num + [int(e)]
```
#### 做法3
```python=
a=[i fori in input().split()]
```
> **後記:** 這是用在有一定東西隔開的情況下
### 函式集
#### Split()
1. split 會產生陣列
2. 預設分割 " "
#### len()
1. 得到list長度
#### index()
1. 找到第一個所求值，並回傳其位置
2. lsit無該數會出bug

## 二維陣列
![](https://i.imgur.com/RBn0KDl.png)
> A[0][0]=0
> A[2][4]=42
:::success
**二維陣列**
1. 把她想成一個矩陣
:::
## 輸入值到陣列之中
```python=
A=[]
for i in range(row):
    A.append([j for j in input().split])
```
## 如何先宣告List 
### 錯誤作法
```python=
A=[[0]*col]*row
```
**說明:** 這個錯法會把[0]*col的指標移到其他row上
**說明:** 因此Python要定義多維陣列最好用索引值
### 正確作法
```python=
A.append([0]*row for i in range(col))
```
#### 備註 
1. python物件是以指標方式實現，因此=代表著兩變數指標相同


##### Example
![](https://i.imgur.com/FJccZlI.png)
> 由上可知 a[0]=b[0]=9 而不是b[0]=9 a[0]=1


