元組 — tuple
元組:也是一個容器類型,可以存儲多個任意類型的數(shù)據(jù)舟山,元組好比是一個只讀的列表绸狐,只能獲取數(shù)據(jù)不能對元組中的數(shù)據(jù)進(jìn)行修改。
元組的表現(xiàn)形式: (1, "3")累盗,最外層表現(xiàn)形式是一對小括號
my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))
print(my_tuple)
print(type(my_tuple))
######### 運(yùn)行結(jié)果 ############
(1, 3.14, True, 'abc', [1, 2], (1, 54))
<class 'tuple'>
不能對元組中的數(shù)據(jù)進(jìn)行修改
如果對元組中的數(shù)據(jù)進(jìn)行修改就會報錯:
my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))
my_tuple[0] = 2
del my_tuple[-1]
print(my_tuple)
######### 運(yùn)行結(jié)果 ############
TypeError: 'tuple' object does not support item assignment
注意:元組只能獲取數(shù)據(jù)
根據(jù)下標(biāo)獲取元組中的數(shù)據(jù)
my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))
result = my_tuple[0]
print(result)
result = my_tuple[-1]
print(result)
######### 運(yùn)行結(jié)果 ############
1
(1, 54)
元組的切片
字符串寒矿,列表,元組都有切片處理
my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))
result = my_tuple[1:4]
print(result)
######### 運(yùn)行結(jié)果 ############
(3.14, True, 'abc')
元組的使用場景:
- 函數(shù)的返回值是元組若债,保證返回的數(shù)據(jù)不能修改
- print函數(shù)進(jìn)行格式化輸出的時候使用元組
通過元組給多個格式化占位符進(jìn)行傳參:
print("我叫:%s 年齡:%d" % ("李四", 20))
######### 運(yùn)行結(jié)果 ############
我叫:李四 年齡:20
元組的注意點(diǎn):
- 元組里面的數(shù)據(jù)不能修改(添加符相,刪除,修改)
- 當(dāng)元組里面只有一個元素蠢琳,元組里面的逗號不能省略
元祖中若只有一個元素時把后面的逗號省去了將不再是元祖類型:
my_tuple = ("abc",)
my_tuple1 = ([1, 2],)
print(my_tuple, type(my_tuple))
print(my_tuple1, type(my_tuple1))
print("=== 元祖中只有一個元素把后面的逗號省去了將不再是元祖類型 ===")
my_tuple2 = ("abc")
my_tuple3 = ([1, 2])
print(my_tuple2, type(my_tuple2))
print(my_tuple3, type(my_tuple3))
######### 運(yùn)行結(jié)果 ############
('abc',) <class 'tuple'>
([1, 2],) <class 'tuple'>
=== 元祖中只有一個元素把后面的逗號省去了將不再是元祖類型 ===
abc <class 'str'>
[1, 2] <class 'list'>
index和count方法結(jié)合元組使用
count: 統(tǒng)計(jì)指定數(shù)據(jù)在元組里面的次數(shù)
my_tuple = (1, 3, "1", 1)
# 統(tǒng)計(jì)指定數(shù)據(jù)1在元組里面出現(xiàn)的次數(shù)
result = my_tuple.count(1)
print(result)
######### 運(yùn)行結(jié)果 ############
2
index: 根據(jù)指定數(shù)據(jù)啊终,獲取數(shù)據(jù)在元組的下標(biāo)
my_tuple = (1, 3, "1", 1)
# 元祖結(jié)合index使用獲取數(shù)據(jù)3在元組的下標(biāo)
result = my_tuple.index(3)
######### 運(yùn)行結(jié)果 ############
1
元祖的遍歷
for循環(huán)遍歷元組中的每一個數(shù)據(jù)
my_tuple = ('西施', "貂蟬", "王昭君", "楊玉環(huán)")
for value in my_tuple:
print(value)
######### 運(yùn)行結(jié)果 ############
西施
貂蟬
王昭君
楊玉環(huán)
while循環(huán)遍歷元祖中的每一個數(shù)據(jù)
my_tuple = ('西施', "貂蟬", "王昭君", "楊玉環(huán)")
index = 0
while index <= 3:
result = my_tuple[index]
print(result)
index += 1
######### 運(yùn)行結(jié)果 ############
西施
貂蟬
王昭君
楊玉環(huán)
擴(kuò)展:len
: 獲取容器類型數(shù)據(jù)的長度, len函數(shù)獲取字符串傲须、列表蓝牲、元組類型的個數(shù)
my_tuple = ('西施', "貂蟬", "王昭君", "楊玉環(huán)")
number = len(my_tuple)
print(number)
######### 運(yùn)行結(jié)果 ############
4
應(yīng)用:
my_tuple = ('西施', "貂蟬", "王昭君", "楊玉環(huán)")
##len函數(shù)獲取元組的結(jié)束下標(biāo)
index = len(my_tuple) - 1
while index >= 0:
result = my_tuple[index]
print(result)
index -= 1
######### 運(yùn)行結(jié)果 ############
楊玉環(huán)
王昭君
貂蟬
西施
擴(kuò)展:反向輸出
my_tuple = ('西施', "貂蟬", "王昭君", "楊玉環(huán)")
result = my_tuple[::-1]
print(result)
######### 運(yùn)行結(jié)果 ############
('楊玉環(huán)', '王昭君', '貂蟬', '西施')
字典 — dict
字典:也是一個容器類型,字典里面的每一個數(shù)據(jù)都是鍵值對(key:value), 字典的最外層表現(xiàn)形式: {key:value, ....}
學(xué)習(xí)字典的目的: 對于存儲描述性信息可以使用字典泰讽,比如:存儲學(xué)生信息例衍,老師信息,教室信息已卸,電腦信息
注意:字典中的key是唯一的, 不能重復(fù)
定義字典
my_dict = {"age": 20, "name": "李四", "address": "北京", "sex": "女"}
print(my_dict, type(my_dict))
######### 運(yùn)行結(jié)果 ############
{'age': 20, 'name': '李四', 'address': '北京', 'sex': '女'} <class 'dict'>
通過key獲取對應(yīng)的value值
my_dict = {"age": 20, "name": "李四", "address": "北京", "sex": "女"}
value = my_dict["age"]
print(value)
sex = my_dict["sex"]
print(sex)
######### 運(yùn)行結(jié)果 ############
20
女
使用上面這種中括號方式獲取字典中的value值佛玄,如果key不存在那么程序會報錯
比如我們想要獲取“李四”的學(xué)歷(educational_history)字典中并沒有:
my_dict = {"age": 20, "name": "李四", "address": "北京", "sex": "女"}
result = my_dict["educational_history"]
print(result)
######### 運(yùn)行結(jié)果 ############
KeyError: 'educational_history'
get方式取值(value)
get方式取值可以提供默認(rèn)值,如果字典有對應(yīng)的key咬最,獲取key對應(yīng)的value值翎嫡,沒有就使用默認(rèn)值:
my_dict = {"age": 20, "name": "李四", "address": "北京", "sex": "女"}
# get方式取值,如果字典有對應(yīng)的key就獲取key對應(yīng)的value值
value = my_dict.get("age")
print(value)
# 如果字典沒有對應(yīng)的key使用默認(rèn)值
result = my_dict.get("educational_history", "碩士")
print(result)
######### 運(yùn)行結(jié)果 ############
20
碩士
字典的增刪改查
添加鍵值對
注意點(diǎn):如果操作的key在字典里面不存在,那么是添加鍵值對操作
my_dict = {"name": "西施", "age": 25}
print(my_dict)
# 添加鍵值對
my_dict["address"] = "杭州"
print(my_dict)
my_dict["sex"] = "女"
print(my_dict)
######### 運(yùn)行結(jié)果 ############
{'name': '西施', 'age': 25}
{'name': '西施', 'age': 25, 'address': '杭州'}
{'name': '西施', 'age': 25, 'address': '杭州', 'sex': '女'}
修改鍵值對
注意點(diǎn):如果操作的key在字典里面永乌,那么是修改鍵值對操作
my_dict = {"name": "西施", "age": 25}
print(my_dict)
# 修改鍵值對惑申,注意點(diǎn):如果操作的key在字典里面具伍,那么是修改鍵值對操作
my_dict["age"] = 20
print(my_dict)
######### 運(yùn)行結(jié)果 ############
{'name': '西施', 'age': 25}
{'name': '西施', 'age': 20}
刪除鍵值對
del
my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)
##刪除鍵值對
del my_dict["address"]
print(my_dict)
######### 運(yùn)行結(jié)果 ############
{'name': '西施', 'age': 25, 'address': '杭州'}
{'name': '西施', 'age': 25}
pop
擴(kuò)展:根據(jù)key刪除鍵值對,并且返回key對應(yīng)的value值
my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)
##pop有返回值
value = my_dict.pop("age")
print(value, my_dict)
######### 運(yùn)行結(jié)果 ############
{'name': '西施', 'age': 25, 'address': '杭州'}
25 {'name': '西施', 'address': '杭州'}
查看數(shù)據(jù)圈驼,獲取數(shù)據(jù)
my_dict = {"name": "西施", "age": 25, "address": "杭州"}
result1 = my_dict["name"]
result2 = my_dict["address"]
print(result1, result2)
######### 運(yùn)行結(jié)果 ############
西施 杭州
清除字典中的所有數(shù)據(jù)
my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)
##清除字典中的所有數(shù)據(jù)
my_dict.clear()
print(my_dict)
######### 運(yùn)行結(jié)果 ############
{'name': '西施', 'age': 25, 'address': '杭州'}
{}
清除列表中的所有數(shù)據(jù)
my_list = [1, 3, 5]
print(my_list)
##清除列表中的所有數(shù)據(jù)
my_list.clear()
print(my_list)
######### 運(yùn)行結(jié)果 ############
[1, 3, 5]
[]
擴(kuò)展:列表里面通過 extend
完成列表的合并人芽,字典里面通過 update
完成字典的合并
字典的合并 — update
my_dict1 = {"name": "貂蟬", "age": 20}
my_dict2 = {"sex": "女", "address": "無錫", "age": 25}
print(my_dict1)
print(my_dict2)
# 把my_dict2字典中的每一個鍵值對添加到my_dict1里面
print("====== 合并后 =====")
my_dict1.update(my_dict2)
print(my_dict1)
######### 運(yùn)行結(jié)果 ############
{'name': '貂蟬', 'age': 20}
{'sex': '女', 'address': '無錫', 'age': 25}
====== 合并后 =====
{'name': '貂蟬', 'age': 25, 'sex': '女', 'address': '無錫'}
字典的常見的操作
len函數(shù)獲取字典的個數(shù)
len
函數(shù)還可以獲取:字符串绩脆,列表萤厅,元組,字典的個數(shù)
my_dict = {"name": "豬八戒", "sex": "男"}
# 獲取字典的個數(shù)
result = len(my_dict)
print(result)
######### 運(yùn)行結(jié)果 ############
2
keys方法獲取字典中的所有key
my_dict = {"name": "豬八戒", "sex": "男"}
# keys方法獲取字典中的所有key
result = my_dict.keys()
# 返回的是dict_keys類型靴迫, 查看數(shù)據(jù)不方便惕味,可以轉(zhuǎn)換成list類型
print(result, type(result))
# 把dict_keys類型轉(zhuǎn)成list
my_list = list(result)
print(my_list, type(my_list))
######### 運(yùn)行結(jié)果 ############
dict_keys(['name', 'sex']) <class 'dict_keys'>
['name', 'sex'] <class 'list'>
values方法獲取字典中的所有value
my_dict = {"name": "豬八戒", "sex": "男"}
# values方法: 獲取字典中的所有value
result = my_dict.values()
# 返回的類型是dict_values,查看數(shù)據(jù)不方便玉锌,可以轉(zhuǎn)換成list類型
print(result, type(result))
my_list = list(result)
print(my_list, type(my_list))
######### 運(yùn)行結(jié)果 ############
dict_values(['豬八戒', '男']) <class 'dict_values'>
['豬八戒', '男'] <class 'list'>
items方法獲取字典中的所有項(xiàng)數(shù)據(jù)名挥,每一項(xiàng)數(shù)據(jù)是一個鍵值對數(shù)據(jù)
my_dict = {"name": "豬八戒", "sex": "男"}
result = my_dict.items()
# 返回的數(shù)據(jù)類型:dict_items,查看數(shù)據(jù)不方便可以轉(zhuǎn)換list類型
print(result, type(result))
my_list = list(result)
print(my_list, type(my_list))
######### 運(yùn)行結(jié)果 ############
dict_items([('name', '豬八戒'), ('sex', '男')]) <class 'dict_items'>
[('name', '豬八戒'), ('sex', '男')] <class 'list'>
字典的遍歷
遍歷字典中的所有key
my_dict.keys()
獲取字典中的所有key
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
# 遍歷字典中的所有key
for key in my_dict.keys(): # my_dict.keys() 獲取字典中的所有key
# 根據(jù)key獲取對應(yīng)的value值
value = my_dict[key]
print(key, value)
######### 運(yùn)行結(jié)果 ############
name 小明
age 18
sex 男
address 北京
遍歷字典中的所有value
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
for value in my_dict.values():
print(value)
######### 運(yùn)行結(jié)果 ############
小明
18
男
北京
遍歷字典中的所有項(xiàng)(item)
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
for item in my_dict.items():
# 遍歷的每項(xiàng)數(shù)據(jù)是一個元組類型主守,元組里面存放的是key和value
print(item, type(item))
# 根據(jù)下標(biāo)獲取元組中的數(shù)據(jù)
# 獲取key
key = item[0]
value = item[1]
print(key, value)
######### 運(yùn)行結(jié)果 ############
('name', '小明') <class 'tuple'>
name 小明
('age', 18) <class 'tuple'>
age 18
('sex', '男') <class 'tuple'>
sex 男
('address', '北京') <class 'tuple'>
address 北京
遍歷的每項(xiàng)數(shù)據(jù)是一個元組禀倔,使用不同變量保存元組中的每一個數(shù)據(jù),這里是操作是拆包:
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
for key, value in my_dict.items():
print(key, value)
######### 運(yùn)行結(jié)果 ############
name 小明
age 18
sex 男
address 北京
擴(kuò)展: 直接遍歷字典参淫,默認(rèn)取的是字典的key
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
for key in my_dict:
print(key)
######### 運(yùn)行結(jié)果 ############
name
age
sex
address
enumerate函數(shù)的使用
enumerate
函數(shù):當(dāng)使用for循環(huán)遍歷數(shù)據(jù)時救湖,又想使用數(shù)據(jù)對應(yīng)的下標(biāo)又想使用數(shù)據(jù)就可以使用enumerate函數(shù)了。
如果不使用 enumerate
函數(shù)想要遍歷數(shù)據(jù)時又獲取下標(biāo)又獲取數(shù)據(jù)涎才,就需要設(shè)置一個變量存放下標(biāo):
my_list = ["a", "b", "c"]
# 記錄當(dāng)前數(shù)據(jù)的下標(biāo)
index = 0
for value in my_list:
print(index, value)
index += 1
######### 運(yùn)行結(jié)果 ############
0 a
1 b
2 c
使用enumerate函數(shù)就會方便很多:
my_list = ["a", "b", "c"]
for item in enumerate(my_list): # enumerate(my_list)表示又取下標(biāo)又取數(shù)據(jù)
# 遍歷的每項(xiàng)數(shù)據(jù)是一個元組
print(item)
######### 運(yùn)行結(jié)果 ############
(0, 'a')
(1, 'b')
(2, 'c')
遍歷的每項(xiàng)數(shù)據(jù)是一個元組鞋既,對元組進(jìn)行拆包處理:
my_list = ["a", "b", "c"]
for index, value in enumerate(my_list):
print(index, value)
######### 運(yùn)行結(jié)果 ############
0 a
1 b
2 c
結(jié)合break
語句使用:
my_list = ["a", "b", "c"]
for index, value in enumerate(my_list): # enumerate(my_list)表示又取下標(biāo)又取數(shù)據(jù)
print(index, value)
if index == 1:
break
######### 運(yùn)行結(jié)果 ############
0 a
1 b
擴(kuò)展: enumerate可以結(jié)合列表,字符串耍铜,元組涛救,字典
例如,enumerate結(jié)合字典:
my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}
for index, item in enumerate(my_dict.items()):
if index == 2:
break
# 利用拆包业扒,獲取元組中的每項(xiàng)數(shù)據(jù)
key, value = item
print(key, value)
######### 運(yùn)行結(jié)果 ############
name 小明
age 18
enumerate結(jié)合字符串:
my_str = "hello"
for index, value in enumerate(my_str):
print(index, value)
######### 運(yùn)行結(jié)果 ############
0 h
1 e
2 l
3 l
4 o
字典的使用練習(xí)題:一個學(xué)校,有3個辦公室舒萎,現(xiàn)在有8位老師等待工位的分配程储,請使用字典編寫程序,完成隨機(jī)的分配
import random
# 1. 三個辦公室臂寝,辦公室是可以容納老師的章鲤,所以每一個辦公室就是一個小列表
# my_list1 = []
# my_list2 = []
# my_list3 = []
# 辦公室列表,里面的每個元素表示一個辦公室咆贬,每個辦公室還是一個列表
office_list = [[], [], []]
# 2. 8位老師败徊,可以定義一個老師列表,存儲8位老師
teacher_list = ["劉老師", "王老師", "郭老師", "馬老師", "牛老師", "楊老師", "朱老師", "侯老師"]
# 3. 依次獲取老師列表中的每一位老師掏缎,然后把老師隨機(jī)分配到指定辦公室
for teacher in teacher_list:
# 生產(chǎn)隨機(jī)數(shù)字皱蹦,隨機(jī)數(shù)字就是辦公室的下標(biāo)
index = random.randint(0, 2)
# 根據(jù)生產(chǎn)的下標(biāo)獲取對應(yīng)的辦公室
office = office_list[index]
# 把老師添加到隨機(jī)的辦公室里面
office.append(teacher)
# 遍歷辦公室列表煤杀,獲取每一個辦公室
for index, office in enumerate(office_list):
# 查看每一個辦公室,每個辦公室是一個列表
num = index + 1
# 獲取辦公室老師的個數(shù)
count = len(office)
print("第%d個辦公室總?cè)藬?shù)為:%d人" % (num, count))
# 遍歷辦公室沪哺,獲取每一個老師信息
for teacher in office:
# 查看每一個老師的信息
print(teacher)
num += 1
######### 運(yùn)行結(jié)果 ############
第1個辦公室總?cè)藬?shù)為:2人
王老師
朱老師
第2個辦公室總?cè)藬?shù)為:3人
郭老師
馬老師
侯老師
第3個辦公室總?cè)藬?shù)為:3人
劉老師
牛老師
楊老師
黑馬程序員Python45期基礎(chǔ)課上課筆記