###### tags: `chapter 6` `Python`
# 6-1 認識串列 #
串列(List)和`int`、`float`、`str`等變數型態不一樣,他是一個「資料結構」,而資料結構的用意是讓我們更方便的操作變數,例如我們這裡要介紹的串列,他提供的是一種類似螺絲盒的結構,盒子內的每一個格子變可以放置我們的螺絲(變數),這樣子對於後續的程式比較友善也利於我們撰寫程式,因為你知道你需要的變數都在這個盒子裡面,我們只要去這個盒子裡面找我們的變數就好了
串列是最基本的資料結構,他相當於是C/C++的「陣列(Array)」,但python的串列比C/C++的陣列要方便的多,和迴圈一起搭配使用時也可以有其他C/C++沒有的功能。
大家都說,一個程式是由「資料結構」$+$ 「演算法」所構成的,由此可知資料結構對於一個程式的重要性,從更日常的角度去思考的話,「鞋櫃就像是串列,而鞋子就像是變數」,沒有鞋櫃可不可以?可以,但是你的鞋子會很亂。
## 我的第一個串列 ##
這裡有一個串列(list)。
```python=
fruits = ["apple" , "banana" , "kiwi"]
```
可以觀察到,這個串列的名字叫做`fruits`,內容物有三個,依序是`apple`、`banana`、`kiwi`,而他們三個被`[]`包起來,`[]`就是我們用來宣告串列的符號。
再細看這三個被包住的變數,他們被`""`包著,看來他們是字串型態!
## 指定串列元素 ##
給定一個串列,如果想輸出其第二個資料,你可以使用`[]`來指定特定元素。
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
print(player[1])
# Jordan
```

python的串列編號是從`0`開始的,並不是直觀的從`1`開始,這一點在使用上必須特別注意。因此串列的第二個資料`player[1]`是`Jordan`,不是`Curry`哦,
:::danger
這一點和介紹字串時所提到的索引值是共用的觀念!
:::

如果在不知道資料個數的情況下,想要輸出最後一個或著倒數第n個資料的話,則可以使`-`加上`index`來指定。
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
print(player[-1])
print(player[-3])
# Howard
# Curry
```
## 串列切片(slice) ##
python的串列提供的slice功能就是C/C++陣列沒有的功能,其目的是為了讓我們能夠更方便的輸出特定範圍的串列資料,其使用方式是在`[]`內使用`:`來分開串列index的起點以及終點。
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
print(player[1:3])
# ['Jordan', 'Curry']
```

起點和終點的判定方式為,起點 <= index < 終點,因此上述的程式才會輸出index為`1`、`2`的球員。

## 更改串列內容 ##
如同前面介紹,串列是由好多個相同類型的變數組成,因此他們拆開仍然是一個變數,也保有變數的特性,因此想更改串列元素的值,和修改變數的值只差需要多一個用`index`指定元素的步驟而已。
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
player[0] = "Thompson"
print(player[0])
# Thompson
```
如果想要刪除串列內容,只需要透過內建的`del()`函數去指定串列元素即可完成。
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
del player[0]
print(player)
# ['Jordan', 'Curry', 'Giannis', 'Howard']
```

刪除時如果忘了指定元素,那整個串列就掰掰囉!!

## 取得串列個數 ##
有時候在做文章字數統計時會需要`len()`來幫助我們得知字數,這樣我們就不用一個一個自己數啦!!!
```python=
player = ["Lebron" , "Jordan" , "Curry" , "Giannis" , "Howard"]
print(len(player))
# 5
```