# 容器結構
###### tags: `Python`
## list 串列
```python=
串列名 = ['int', 'str', 'float', '都行']
```
### 範例: 立委名條
#### 使用串列前:
```python=
nameList = '國瑜\n啟丞\n'
nameList += '永康\n' + '巧芯\n'
print(nameList)
# output:
# 國瑜
# 啟丞
# 永康
# 巧芯
```
#### 使用串列後:
```python=
nameList = ['國瑜', '啟丞', '永康']
nameList.append('巧芯')
print(nameList)
# 輸出結果: ['國瑜', '啟丞', '永康', '巧芯']
anotherList = ['寬恆', '崐萁']
nameList += anotherList
print(nameList)
# 輸出結果: ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
```
如果想添加單一元素可以用 `.append()`
如果想合併串列則可以直接 `+=`
### 常見方法
```python=
testListone = list(['int','str','float','都行'])
print(testListOne)
# 輸出結果: ('int','str','float','都行')
testListTwo = list('Hello') #拆解字串
print(testListTwo)
# 輸出結果: ('H', 'e', 'l', 'l', 'o')
testListThree = list(range(10)) #依序加入10個數字(0開始)
print(testListThree)
# 輸出結果: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
testListFour = ['國昌'] * 3
print(testListFour)
# 輸出結果:['國昌', '國昌', '國昌']
```
### 索引用法
```python=
nameList = ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
# 索引用法
print(nameList[0])
# 輸出結果: 國瑜
print(nameList[5])
# 輸出結果: 崐萁
print(nameList[-1]) #倒數第一
# 輸出結果: 崐萁
print(nameList[-2]) #倒數第二
# 輸出結果: 寬恆
newList = nameList[1:3] #索引1~2(小於3)
print(newList)
# 輸出結果: ['啟丞', '永康']
newList = nameList[:3] #索引0~2(小於3)
print(newList)
# 輸出結果: ['國瑜', '啟丞', '永康']
newList = nameList[1:] #索引1~最後
print(newList)
# 輸出結果: ['啟丞', '永康', '巧芯', '寬恆', '崐萁']
newList = nameList[::] #索引0~最後
print(newList)
# 輸出結果: ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
# Python 獨有
numList = list(range(10))
print(numList[::3]) #0開始遞增3的索引值
# 輸出結果: [0, 3, 6, 9]
print(numList[::-3]) #最後開始遞減3的索引值
# 輸出結果:[9, 6, 3, 0]
# 更改特定索引元素
nameList[1] = '永康'
print(nameList)
# 輸出結果: ['國瑜', '永康', '永康', '巧芯', '寬恆', '崐萁']
# 計算特定元素出現次數
nameList.count('永康')
# 輸出結果: 2
# 查詢元素索引值最小的數
nameList.index('永康')
# 輸出結果: 1
# 在指定索引加入特定元素
nameList.insert(1,'啟丞')
print(nameList)
# 輸出結果: ['國瑜', '啟丞', '永康', '永康', '巧芯', '寬恆', '崐萁']
# 刪除特定元素(索引值最小)
nameList.remove('永康')
print(nameList)
# 輸出結果: ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
# 串列反轉
nameList.reverse()
print(nameList)
# 輸出結果: ['崐萁', '寬恆', '巧芯', '永康', '啟丞', '國瑜']
# 查看某個值是否在該串列中
nameList = ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
'伯洋' in nameList
# 輸出結果: False
'國瑜' in nameList
# 輸出結果: True
# 清空串列
nameList.clear()
print(nameList)
# 輸出結果: []
```
## Tuple 元組
除了串列之外,也有其他的容器。
```python=
testTuple = ('int', 'str', 'float', '都行')
testTuple = 'int', 'str', 'float', '不加括號預設為元組'
testTuple = '如果只有一個資料,一定要再加一個逗號',
```
需注意的`Tuple`內的參數是不可以更改的
### 常見用法
```python=
# 其他建立Tuples的方法
testTupleOne = tuple(['int','str','float','都行'])
print(testTupleOne)
# 輸出結果: ('int','str','float','都行')
testTupleTwo = tuple('Hello')
print(testTupleTwo)
# 輸出結果: ('H', 'e', 'l', 'l', 'o')
testTupleThree = tuple(range(10))
print(testTupleThree)
# 輸出結果: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
testTupleFour = ('int', 'str') * 3
print(testTupleFour)
# 輸出結果: ('int', 'str', 'int', 'str', 'int', 'str')
# 索引用法
NameList = ('國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁')
print(NameList[0])
# 輸出結果: 國瑜
print(NameList[5])
# 輸出結果: 崐萁
print(NameList[2:4]) #索引2~3(小於4)
# 輸出結果: ('永康', '巧芯')
print(NameList[:3]) #索引0~2(小於3)
# 輸出結果: ['國瑜', '啟丞', '永康']
print(NameList[1:]) #索引1~最後
# 輸出結果: ['啟丞', '永康', '巧芯', '寬恆', '崐萁']
print(nameList[:]) #索引0~最後
# 輸出結果: ['國瑜', '啟丞', '永康', '巧芯', '寬恆', '崐萁']
# 計算特定元素出現次數
print(nameList.count('永康'))
# 輸出結果: 1
# 查詢元素索引值最小的數
print(nameList.index('永康'))
# 輸出結果: 1
```
## Dictionary
```python=
字典名 = {'key1': 2024, 'key2': 'value2', 'key3': 3.14159}
```
可以想像`key`為字典的`索引`,而`value`則是`索引值`;所以`索引`不可重複,但`索引值`可重複。
### 範例: [馬斯克](https://zh.wikipedia.org/zh-tw/%E5%9F%83%E9%9A%86%C2%B7%E9%A9%AC%E6%96%AF%E5%85%8B)個人資訊
```pythn=
dic = {'英文姓名':'Elon Reeve Musk',
'出生年份':1971,
'出生國家':'南非'
'擁有國籍':['南非', '加拿大', '美國'],
'目前職業':['Tesla CEO', 'SpaceX CEO']
}
```
## Str 字串補充
### 字串裁切
```python=
s = 'Hello World!'
c = s[0]
print(c)
# 輸出結果: H
c = s[-1]
print(c)
# 輸出結果: !
c = s[2:4] # 複製第3到第4個字元(程式順序從0開始;最大的順序小於4)
print(c)
# 輸出結果: ll
c = s[2:] # 複製第3個字元到最後
print(c)
# 輸出結果: llo World!
c = s[:4] # 複製第1個字元到第4個
print(c)
# 輸出結果: Hell
c = s[:] # 複製全部
print(c)
# 輸出結果: Hello World!
```
### 常見功能
``` python=
s = ' Hi, I am Tom '
print(s.upper()) # 全部字元轉大寫
# 輸出結果: HI, I AM TOM
print(s.lower()) # 全部字元轉小寫
# 輸出結果: hi, i am tom
print(s.capitalize()) # 限定開頭大寫
# 輸出結果: Hi, i am tom
print(s.title()) # 單字開頭轉大寫
# 輸出結果: Hi, I Am Tom
print(len(s)) # 統計字元數
# 輸出結果: 12
print(s. strip()) #清除字串的前後空白
# 輸出結果: Hi, I am Tom
```