元組 tuple
-
元組是不可變的序列,同list一樣,元組是可以存儲任意類型
的資料的容器
元組的表式方法:
-
用小括号() 括起來,單個元素括起來後加逗号(,)區分單個
對象還是元組
建立空元組的字面值:
-t = () # 建立一個空元組用t綁定
建立非空元組的字面值
t = 200, # 建立一個隻有一個數字200的元組用綁定
t = (20,)
t = (1, 2, 3)
t = 100, 200, 300
建立的元組的錯誤示例:
t = (20) t綁定整數20,不是元組
x, y, z = (100, 200, 300) # 序列指派
x, y, z = 100, 200, 300
x, y, z = [100, 200, 300]
x, y, z = "ABC" # 序列指派,不是元組
x, y = y, x # 交換兩個變量的綁定關系
type(x) 函數傳回x的類型
元組的構造函數 tuple
- tuple() 生成一個空的元組,等同于()
- tuple(iterable) 用可疊代對象生成一個新的元組
示例:
t = tuple()
t = tuple("ABC")
t = tuple(range(1, 10, 3))
元組的運算:
+ += * *=
t = (1, 2, 3) + (4, 5, 6) # t=(1,2,3,4,5,6)
t = (1,2,3)
t += (4,5,6) # t = (1,2,3,4,5,6)
t = (1,2) * 3 # t =(1,2,1,2,1,2)
t = (1,2)
t *= 3
比較運算:
- < <= > >= == !=
- 比較規則與清單的比較規則完全相同
- in / not in運算符
- 等同于清單的 in / not in 運算符
- 索引 和 切片
- 索引取值和切片取值的規則與清單完全相同
- 注: 元組不支援 索引指派和切片指派
序列相關的函數也能用于元組中
- len(x), max(x), min(x),
- sum(x), any(x), all(x)
字典 dict
- 什麼是字典
- 字典是一種可變的容器,可以存儲任意類型的資料
-
字典中的每個資料都是用"鍵"(key) 進行索引的,而不
像序列(str,list,tuple)可以用整數進行索引
- 字典中的資料沒有先後順序關系,字典的存儲是無序的
- 字典中的資料以鍵(key)-值(value)對形式進行存儲
- 字典的鍵不能重複,且隻能用不可變類型作為字典的鍵
建立字典的字面值方式:
-
字典的表示方式以{} 括起來,以冒号(? 分隔鍵值對,各鍵
值對之間用逗号分隔開
-
建立空字典:
d = {}
-
建立非空字典:
d = {“姓名”: “tarena”, “年齡”: 15}
d = {“one”: 1, “two”: 2}
d = {1: “One”, 2: “二”, 3: [1,2,3]}
d = {“a”: list(range(10))}
d = {“a”: {“b”: 100, “c”:[1, 2, 3]}}
建立字典的構造函數 dict:
- dict() # 生成一個空的字典 等同于 {}
- dict(iterable) 用可疊代對象建立一個清單
- dict(**kwargs) 關鍵字傳參形式生成一個字典
** 示例:**
d = dict()
L = [ (1, 2), [3, 4], "AB" ]
d = dict(L) # {1: 2, 3: 4, 'A': 'B'}
d = dict(name="tarena", age=15)
# d = {'age': 15, 'name': 'tarena'}
- 字典的鍵必須為不可變類型的值
可變的類型有四種:
- list(清單), dict(字典), set(集合),
-
bytearray(位元組數組)
(除上述四種其它為不可變類型)
字典基本操作
- 字典的鍵索引
- 文法:
- 字典[鍵]
- 作用:
- 用鍵擷取字典的鍵對應的值
**示例: **
d = {'name': 'tarena', 'age': 16}
print(d['name'], "的年齡是", d['age'])
添加和修改字典的元素
- 文法:
- 字典[鍵] = 值
- 說明:
- 鍵不存在時,建立鍵,并讓鍵綁定對應的值
-
鍵存在,修改鍵綁定的值
示例:
d = {}
d[‘name’] = “小張” # 添加一個鍵值對
d[‘年齡’] = 20 # 添加一個鍵值對
d[‘年齡’] += 1 # 修改’年齡’ 這個鍵對應的值
練習:
寫一個程式,讓使用者分兩次輸入一個人的資訊:
資訊包含: 姓名 和 電話号碼
讓使用者多個人的資訊,當輸入姓名為空時結束輸入
把使用者輸入的資料存于字典中
姓名作為鍵, 電話号碼作為值
最後列印存儲資料的字典
如:
請輸入姓名: 小張
請輸入電話: 13888888888
請輸入姓名: 小李
請輸入電話: 13999999999
請輸入姓名: <回車>
列印:
{“小張”: 13888888888, “小李”: 13999999999}
删除字典元素
- del 語句
- 文法:
- del 字典[鍵]
- 文法:
示例:
d = dict(name="小張", age=20)
del d['age']
print(d) # {'name': '小張'}
字典的鍵判斷 in , not in運算符
-
可以用 in 運算符判斷一個鍵是否存在于字典中,如果存在
則傳回True, 否則傳回False
- not in 傳回值與 in 相反
例如:
d = {'name' : 'tarena', 'age': 15}
'name' in d # True
15 in d # False
'age' not in d # False
練習:
寫程式,實作以下需求:
1. 将如下資料形成一個字典 seasons
鍵 值
1 ====> '春季有1,2,3月'
2 ====> '夏季有4,5,6月'
3 ====> '秋季有7,8,9月'
4 ====> '冬季有10,11,12月'
-
讓使用者輸入一個整數代表這個季度,列印這個季度對應的
資訊,如果使用者輸入的資訊不存在于字典内,則提示使用者
‘資訊不存在’
字典的疊代通路
- 字典是可疊代對象,字典隻能對鍵進行疊代通路
示例:
- d = {0:‘零’, 5:‘伍’, 1:‘壹’, 2:‘貳’}
- for n in d:
- print(n) # 0, 1, 2, 5
可以用于字典的函數:
len(x) 傳回字典的鍵值對的個數
max(x) 傳回字典的鍵的最大值
min(x) 傳回字典的鍵的最小值
sum(x) 傳回字典的所有鍵的和
any(x) 真值測試,隻對鍵進行測試,隻要有一個鍵為真值
結果就為True
all(x) 真值測試,所有鍵的真值結果才為True
示例:
d = {0:‘零’, 5:‘伍’, 1:‘壹’, 2:‘貳’}
len(x)
…
示例:
d = {0:'零', 5:'伍', 1:'壹', 2:'貳'}
for t in d.items():
print(t) # (0, '零'), (1, '壹'), (2, '貳'), (5, '伍')
for k, v in d.items():
print("鍵是", k, '值是', v)
練習:
輸入一段字元串,列印出這個字元串中出現過的字元及出現過
的次數
如:
輸入: abcdabcaba
列印如下:
a: 4次
b: 3次
d: 1次
c: 2次
注: 不要求列印順序
字典推導式
- 字典推導式是用可疊代對象來建立字典的表達式
- 文法:
- {鍵表達式: 值表達式 for 變量 in 可疊代對象
- [if 真值表達式]}
- 注: []的内容代表可省略
- {鍵表達式: 值表達式 for 變量 in 可疊代對象
示例:
- 生成一個字典: 鍵為數字0~9, 值為鍵的平方
- 如生成 {0: 0, 1:1, 2:4, 3: 9, … 9:81}
- d = {x: x**2 for x in range(10)}
- print(d)
字典推導式的嵌套
- 文法同清單推導式嵌套
練習:
已知有如下字元串的清單:
L = ['Tarena', 'XiaoZhang', 'xiaowang']
生成如下字典:
d = {'Tarena':6, 'XiaoZhang':9,
'xiaowang':8}
練習:
Nos = [1001, 1002, 1005, 1006]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
試生成如下字典:
d = {1001: 'Tom', 1002: 'Jerry',
1005: 'Spike', 1006: 'Tyke'}
答案:
d = {Nos[i]: names[i] for i in range(4)}
字典 VS 清單
- 都是可變的容器
- 索引方式不同,清單用整數索引,字典用鍵索引
- 清單的存儲是有序的,字典的存儲是無序的
- 字典的插入,删除,修改的速度可能會快于清單(重要)
問題:
L = [1, 3, 5, 8, 10]
for x in L:
L.remove(x)
print(L) # [3, 8]
練習:
-
生成前40個斐波那契數 (Fibonacci 數列)
1 1 2 3 5 8 13 21 …
要求: 将這些數存入在清單中
最後列印出這些數
-
有一隻小猴子,摘了很多桃,
第一天吃了全部的桃子的一半,感覺不飽又吃了一個
第二天吃了剩下的一半,感覺不飽又吃了一個
以此類推…
到第10天,發現隻剩下一個了
問: 第一天摘了多少桃子?
-
列印九九乘法表:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
…
…9x9=81