# <span>Python Note</span>
> ### **基本指令**
---
* **輸入**
`a = input()` *此輸入型態一率為 char*
1. 轉型
`型態(input())`
ex.
`a_int = int(input())` *⭢ 輸入型態由char轉 int*
2. 連續輸入
* `list(input().strip())`
ex.
`a_list = '123'`
`a_list = list(input().strip())` *⭢ a_list = ['1', '2', ...]*
* `[input().spilt()]`
多加[],型態會變成二元陣列 *⭢ a_list = [['1', '2', ...], ...]*
* `map(型態, input().split())`
ex.
`a, b = map(int, input().split())` *⭢ a, b個別傳入值,型態為int*
3. 同一行分別輸入 加入list
`enter = list(input())`
*⭢ 輸入為'a' 'b' 'c',enter = ['a', 'b', 'c']*
* **輸出**
1. 一般文字
`print("文字內容")`
ex.
`print("Hello.")` *⭢ 輸出:Hello.*
2. 包含參數
`print(f"文字內容{參數}文字內容")`
3. 依序列出陣列內容
`for 參數 in 陣列:`
`print(參數, end = " ")`
ex.
`list_num = [1, 2, 3]`
`for num in list_num:`
` print(num, end = " ")` *⭢ 輸出:1 2 3*
4. 浮點數印出
* 有四捨五入
`round(參數, 浮點數第幾位)` *⭢ 多的浮點數取一部分*
ex.
`print(f"{round(3.14159, 3)}")`
*⭢ 輸出:3.141*
or
`"{:.浮點數第幾位f}".format(參數)` *⭢ 設浮點數取到第幾位 注意會四捨五入*
ex.
```
a = 1.0
print("{:.3f}".format(a))
```
*⭢ 輸出:1.000*
* 無四捨五入
`字串參數[:字串參數.index('.') + 要取幾個數字] `
ex.
```
a = 3.14515
a_str = str(a)
result = a_str[:a_str.index('.') + 3]
print(result) # 輸出: 3.14
```
* **list**
1. int轉成list
* 從頭排序 *ex. a = 3, list_a = [1, 2, 3]*
`a_list = list(range(1, a + 1))`
* 一般int轉list
`list = [int(digit) for digit in str(參數)]`
ex.
```
a = 245
a_list = [int(digit) for digit in str(a)]
print(a_list)
```
*⭢ 輸出:[2, 4, 5]*
2. 建立有範圍的list
ex.
`list = [i for i in range(128)]` *⭢ list = [0, 1, ..., 127]*
3. 反轉
`list.reverse()`
4. 值都一樣的list
* ⭢ [值]*陣列長度
**注意!這樣以後做更動的話會整個陣列一起變動 無法單獨改變**
ex.
```
a = [0] * 5
print(a)
```
*⭢ 輸出:[0, 0, 0, 0, 0]*
* [值 for _ in range(陣列長度)]
ex.
`a = [0 for _ in range(n)]`
* 新增元素至任意位置
`list.insert(想放入位置, 值)`
ex.
```
my_list = [2, 3, 4]
my_list.insert(0, 1) # 在第零項插入元素 1
```
*⭢ my_list = [1, 2, 3, 4]*
* **多維list**
* 設定項次內容
ex.
`list_2d = [[sublist, 0] for sublist in list_2d]`
*⭢ list_2d[sublist][1] 皆為0*
* 項次內容改變
ex.
`list_2d = [[sublist, sublist[1] + 1] for sublist in list_2d]`
*⭢ list_2d[sublist][1] 皆+1 變成皆為1*
* 排序
`list.sort(key = lambda 變數: key值)`
ex.
```
a = [['a', 1], ['c', 2], ['b', 3]]
a.sort(key=lambda x: x[0]) #指定sort要看子序列第一個元素
```
*⭢ a = [['a', 1], ['b', 3], ['c', 2]]*
* enumerate
⭢ 用於迭代序列時跟蹤索引
ex.
```
# 列舉列表中的元素及其索引
my_list = ['蘋果', '香蕉', '櫻桃']
for index, fruit in enumerate(my_list):
print(index, fruit)
# 列舉字符串中的字符及其索引
my_string = 'hi'
for index, char in enumerate(my_string):
print(index, char)
# 指定起始索引值為 1
for index, fruit in enumerate(my_list, start=1):
print(index, fruit)
```
*⭢ 輸出 :
0 蘋果
1 香蕉
2 櫻桃
0 h
1 i
1 蘋果
2 香蕉
3 櫻桃*
* 新增
`list = [1, 2, 3]`
`list_1.append(list)` *⭢ list_1 = [[1, 2, 3]] 為二維陣列*
`list_2.extend(list)` *⭢ list_2 = [1, 2, 3] 為一維陣列*
* **迴圈**
* 有區間範圍
`for i in range(min, max):` *⭢ 範圍從 min 到 max - 1*
* 只要固定值進入迴圈
`for i in(a, b):` *⭢只有 a, b 會進入迴圈*
* **其它**
* 進位轉換
`int(數字)` *⭢ 十進位*
`bin(數字)` *⭢ 二進位*
`oct(數字)` *⭢ 八進位*
`hex(數字)` *⭢ 十六進位*
* 進位運算
只能先轉十進位運算在轉成其它進位
* 進位輸入
`a = input()` *⭢ 原 a 為str*
`bin_a = int(a, 2)` *⭢ int(參數, 幾進位) : 轉十進位*
* 進位輸出
`print(bin(8))` *⭢ 輸出:0b1000 *
`a = bin(8)[2:]`
`print(a)` *⭢ 移除前綴,輸出:1000*
* ASCII code轉換
`ord()`
ex.
```
text = "Hello"
ascii_values = [ord(char) for char in text]
print(ascii_values)
```
*⭢ 輸出:[72, 101, 108, 108, 111]*
* 排序
`sorted()` ⭢ 對列表進行排序,不修改原始列表
ex.
```
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_list = sorted(my_list)
print("Sorted list:", sorted_list)
print("Original list:", my_list) # 原始列表保持不變
```
`sort()` ⭢ 直接修改原始列表
ex.
```
my_list.sort()
print("Sorted list:", my_list) # 原始列表已經被修改
```
* 倒序
[::-1]
ex.
```
a = "apple"
a_reverse = a[::-1]
```
*⭢ a_reverse = "elppa"*
* 非a則b
`a if condition else b` *⭢ 等同於 condition ? a : b*
ex.
`result = 'even' if x % 2 == 0 else 'odd'`
*⭢ 不是偶數則為奇數*
* 刪除
* pop()
⭢ 僅從列表中刪除並返回**最後一個元素**
ex.
```
list = [1, 2, 3]
target = list.pop()
# list = [1, 2]
# target = 3
```
* del & remove()
⭢ 刪除列表中特定元素
ex.
```
nums = [2, 7, 11, 15]
nums.remove(11) # nums = [2, 7, 15]
del nums[2] # nums = [2, 7]
```
* **math**
* log
ex.
`log_base_2 = math.log(8, 2)`
*⭢ 輸出:3
* **def**
⭢ 定義函數的關鍵詞
ex.
```
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
```
*⭢ 設定判斷是否為質數的函數*
* **join()**
⭢ 將字元或字串串聯在一起
ex.
```
words = ["Hello", "world", "Python"]
sentence = ' '.join(words)
print(sentence)
```
*⭢ 輸出:Hello world Python*
ex.
```
a_list = ['1', '2', '3']
a = "".join(map(str, a_list)) #為了轉成字串才加map
```
*⭢ a = '123'*
* **lambda** *(超好用...*
* 排序 & sort / sorted
ex.
```
words = ["apple", "banana", "orange", "grape"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 輸出:['apple', 'grape', 'banana', 'orange']
```
* 過濾 & filter
ex.
```
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # 輸出:[2, 4, 6, 8, 10]
```
* 整體調整 & map
ex.
```
numbers = [1, 2, 3, 4, 5]
doubled_numbers = map(lambda x: x * 2, numbers)
print(list(doubled_numbers)) # 輸出:[2, 4, 6, 8, 10]
```
* **zip()**
⭢ 將多個可迭代對象進行組合,返回一個由 tuple 構成的迭代器
ex.
```
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = ['x', 'y', 'z']
zipped = zip(list1, list2, list3)
```
*⭢ (1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')*
<span>
</span>
> ### **標準庫**
---
* **math**
* 最大公因數 & 最小公倍數
`math.gcd(a, b)` *⭢ 最大公因數*
`lcm = (a * b) // math.gcd(a, b)` *⭢ 最小公倍數 ( python只有gcd*
* **re**
* findall