Python 內建資料型別
- Variables can store data of different types, and different types can do different things.
- Text Type:
str
- Numeric Types:
int
,float
,complex
- Boolean Type:
bool
- Sequence Types:
list
(串列),tuple
(序對),range
- Mapping Type:
dict
(字典) - Set Types:
set
(集合),frozenset
- Binary Types:
bytes
,bytearray
,memoryview
- None Type:
NoneType
- Text Type:
進階:字串處理
常用的內建函式
💡 Python 中,關於字串處理的內建函式,其實還有很多,碰到再 google 就可以了。
- 計算字串長度 (幾個字元):
len()
word = "Abyss" print(len(word))
以「字元」分割字串,最終回傳切割後的串列 (list):
split()
sent = '春眠不覺曉,處處聞啼鳥,夜來風雨聲,花落知多少。' print(sent.split(',')) # ['春眠不覺曉', '處處聞啼鳥', '夜來風雨聲', '花落知多少。']
索引 (Index)
text = '一二三四五六七八九零'
print(text[0])
# 一
print(text[1])
# 二
print(text[-1])
# 零
print(text[-2])
# 九
print(text[0:10:1])
print(text[:])
# 一二三四五六七八九零
- 利用
中括號 []
取出/操作 字串的部份內容 (即 字元)。 - 字串的索引值 (index) 是
從 0 開始
的。
取出部分字串 (Slicing)
text = '一二三四五六七八九零'
print(text[1:9:2])
# 二四六八
print(text[1:9:-1])
#
print(text[::-1])
# 零九八七六五四三二一
print(text[6:-1])
# 七八九
print(text[8:])
# 九零
print(text[:3])
# 一二三
# 解析
一 二 三 四 五 六 七 八 九 零
0 1 2 3 4 5 6 7 8 9 [index]
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 [index]
word[start : end : sep]
- 預設
- word[0: len(word): 1] = word[:] = word
- 輸出範圍
- 從起始到結束的前一個字元,每隔 sep 個字元取一個字元出來,即輸出 word[start], word[start + 1], ... word[end - 1]
- 簡言之,包含 start,不包含 end,間隔 sep 個字元取出
- sep 預設為 1。若 sep 大於 0,表示由左到右取出字元;若 sep 小於 0,表示由右到左取出字元。
- 預設
List 串列
為何需要 List?
簡介
- 由一連串資料所組成、有順序且可改變內容(mutable)的序列。
- 以
[ ] 中括號
標示,裡面的資料以逗號 , 隔開。 - list 中可以包含不同型別的元素。
test1 = [1, "Taipei", 2, "Tokyo"]
若 list 的元素相同但
順序不同
,表示不同 list。test1 = [1, "Taipei", 2, "Tokyo"] test2 = [2, 1, "Taipei", "Tokyo"] print(test1 == test2) # False
建立串列
空串列
# 方法一:使用 Python 內建的 list() 函式建立串列 list1 = list() # 方法二 list1 = []
包含數值或文字的串列
list2 = [1, 2, 3] list3 = "A,B,C,D".split(',') print(list3, type(list3)) # ['A', 'B', 'C', 'D'] <class 'list'>
從 range 建立串列
# 方法一 list4 = list(range(5)) # 方法二:串列解析法 (List comprehension) list4 = [i for i in range(5)] # 方法三 list5 = [] for i in range(5): list5.append(i) print(list5) # [0, 1, 2, 3, 4]
串列解析法 (List comprehension)
Python 提供一種更簡潔的方式來建立串列。
# 語法 [expression for item in list] [expression for item in list if condition] expression:欲輸出的 串列元素運算結果
L1 = [i for i in range(5)] # [0, 1, 2, 3, 4] L2 = [i*2 for i in range(5)] # [0, 2, 4, 6, 8] a1 = [-1.5, -2, 0, 2, 8] a2 = [abs(i) for i in a1] # [1.5, 2, 0, 2, 8] a3 = [i for i in a1 if i >= 0] # [0, 2, 8]
內建函式
len(L)
:傳回 L (串列參數) 的長度,亦即包含幾個元素。max(L)
、min(L)
:傳回 L 中最大、最小的元素。sum(L)
:傳回 L 中元素的總和。random 模組的
shuffle(L)
:將 L 中的元素隨機重排。import random L = [1,2,3,4,5] random.shuffle(L) print(L)
運算子
+
、*
print([1, 'abc', '我'] + ['Taipei', 2]) # [1, 'abc', '我', 'Taipei', 2] print([1, 'a'] * 3) # [1, 'a', 1, 'a', 1, 'a']
- 比較運算子:
>
<
>=
<=
==
!=
- 進行比較時,會先從兩個串列的第一個元素開始。
- 若不相等,顯示比較結果。
- 若相等,繼續比較第二個元素,依此類推。
print([1, 2, 3] < [1, 3, 2]) # True
- 進行比較時,會先從兩個串列的第一個元素開始。
in
not in
運算子print("ab" in [2, "abc", "ba"]) # False
- Index 與 Slicing
💡 預設: L[ 0 : len(L) : 1] == L[ : ] == L => L[start : end : step]
串列處理方法
💡 符號表示之說明
- x 單一的元素
- L 串列 (list)
- i 索引值
list.append(x)
、list.extend(L)
、list.insert(i, x)
、list.remove(x)
、list.pop([i])
L = [10, 20, 30] L1 = ['a', 5] L.append(1) print(L)
list.index(x)
、list.count(x)
、list.sort(reverse=False)
、list.reverse()
、list.copy()
、list.clear()
L = [10, 20, 30, 1, 2, 10] print(L.index(10)) # 傳回元素 10 第一次出現的索引 print(L.count(10))
del
用來從 list 中 刪除 指定索引 的元素。
L = [-1, 1.5, 0, 1, 2, 3, 4, 5] del L[2] print(L) # [-1, 1.5, 1, 2, 3, 4, 5] # 刪除索引為 2 的元素 del L[2:4] print(L) # [-1, 1.5, 3, 4, 5] # 刪除索引為 2~3 的元素 del L[:] print(L) # [] # 刪除所有元素(得到空串列)
- 刪除 變數本身
L = [-1, 1.5, 0, 1, 2, 3, 4, 5] del L print(L) # NameError: name 'L' is not defined # 存取被刪除的變數 L 將會發生錯誤!
多維串列(nD list)
1D list
# 1D list
a = [1, 2, 3, 4, 5, 6]
2D list
a = [[1, 2, 3], [4, 5, 6]]
print(a[0][1])
#2
print(a[1][2])
#6
3D list
a = [[1, [2, 3]], [4, [5, 6]]]
print(a[0][1][0])
#2
print(a[1][1][1])
#6