总结容器:统一管理数据
字符串str:储存字符编码值,不可变,序列
列表list:储存变量,可变,序列
元组tuple:储存变量,不可变,序列
字典dict:储存键值对,可变,散列
键不能重复且不可变
集合set:储存键,可变,散列
不可变:数据在内存中本质都是不可变,采用按需分配的存储机制
可变:具有扩容能力,采用预留空间的存储机制
序列:相邻有序,定位灵活(索引、切片)
散列:分散无序,定位迅速(键)
列表:存储单一维度的数据,例如:治愈人数列表,地区列表
字典:存储多个维度的数据,例如:学生信息,疫情列表
# 1. 创建
dict01 = {"a": "A", "b": "B"}
list01 = [10, 20, 30]
list02 = list(dict01) # ['a', 'b']
list03 = list(dict01.values()) # ['A', 'B']
list04 = list(dict01.items()) # [('a', 'A'), ('b', 'B')]
# 列表转换为字典的格式要求:列表中元素必须能够一分二
list05 = [('a', 'A'), ('b', 'B')]
dict02 = dict(list05) # {'a': 'A', 'b': 'B'}
# 2.添加
list01.append(40)
list01.insert(1, 50)
dict01["c"] = "C"
# 3. 定位 容器名称[整数] 容器名称[开始:结束:间隔]
print(list01[0])
list01[-1] = 100
print(list01[:2])
# 遍历右侧,依次存入左侧
list01[-2:] = "悟空"
# import random
# # 包含开始结束
# random.randint(1,10)
# 删除
list01.remove(20)
del list01[0]
print(list01)
# 遍历
# 从头到尾读取
for item in list01:
print(item)
# 根据索引定位
for i in range(len(list01)):
print(list01[i])
# 键值对
for k,v in dict01.items():
print(k)
print(v)
# 键
for k in dict01:
print(k)
# 值
for v in dict01.values():
print(v)
for for 嵌套
1. 在思想上讲,从内到外编写
2. 在执行过程,外层执行一次执行多次
3. 在行列控制,外层决定行内层决定列
"""
for for 嵌套
1. 在思想上讲,从内到外编写
2. 在执行过程,外层执行一次执行多次
3. 在行列控制,外层决定行内层决定列
"""
"""
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
# 换行
print()
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
print("老王",end = " ")
# 换行
print()
"""
# 外层循环控制行
for r in range(2): # 0 1
# 内层循环控制列
for c in range(5): # 01234 01234
print("老王", end=" ")
print()
"""
自定义排序算法
"""
# 核心思想:
# 确定第一个元素是最大值
# 确定第二个元素是最大值
# ...
# 确定第倒数第二个元素是最大值
# 步骤:
# 1.取出前几个数据(不要最后一个)
# 2.与后面元素进行比较
# 3.发现更xx则交换(取出的 比较的)
list01 = [43, 15, 5, 67, 87, 9]
for r in range(len(list01) - 1): # 0 1
for c in range(r + 1, len(list01)):
if list01[r] > list01[c]:
list01[r], list01[c] = list01[c], list01[r]
print(list01)
"""
列表推导式 嵌套
"""
list01 = ["香蕉", "苹果", "哈密瓜"]
list02 = ["雪碧", "可乐", "牛奶", "绿茶"]
# list_result = []
# for r in list01:
# for c in list02:
# list_result.append(r + c)
# print(list_result)
list_result = [r + c for r in list01 for c in list02]
练习一
"""
5行7列
*******
*******
*******
*******
*******
"""
for row in range(5):
for column in range(7):
print("*",end = "")
print()
练习二
# 定位单个元素: 列表名称[行索引][列索引]
# 从头到尾读取所有元素:for 元素 in 容器:
# 循环其他元素:for 索引 in range(...):
# 二维列表名
list01 = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
]
print(list01[0][2]) # 3
# 打印出5/9/12
print(list01[0][4])
print(list01[1][3])
print(list01[2][1])
# (每行一个)打循环印6, 7, 8, 9, 10
for item in list01[1]:
print(item)
# (每行一个)循环打印15,14,13,12,11
for i in range(len(list01[2]) - 1, -1, -1):
print(list01[2][i])
# (每行一个)循环打印1,6,11
for r in range(len(list01)):
print(list01[r][0])
# (每行一个)循环打印14,9,4
for r in range(len(list01) - 1, -1, -1):
print(list01[r][3])
# 以表格状打印每个元素(不要逗号)
for line in list01:
for item in line:
print(item, end=" ")
print()
练习三
# 商品字典
dict_commodity_infos = {
1001: {"name": "屠龙刀", "price": 10000},
1002: {"name": "倚天剑", "price": 10000},
1003: {"name": "金箍棒", "price": 52100},
1004: {"name": "口罩", "price": 20},
1005: {"name": "酒精", "price": 30},
}
# 订单列表
list_orders = [
{"cid": 1001, "count": 1},
{"cid": 1002, "count": 3},
{"cid": 1005, "count": 2},
]
# 1.打印所有商品信息,
# 格式:商品编号xx,商品名称xx,商品单价xx.
for cid, info in dict_commodity_infos.items():
print(f'商品编号{cid},商品名称{info["name"]},商品单价{info["price"]}')
# 2. 打印所有订单中的信息,
# 格式:商品编号xx,购买数量xx.
for order in list_orders:
print("商品编号%d,购买数量%d." % (order["cid"], order["count"]))
# 3. 打印商品单价小于2万的商品信息
# 格式:商品编号xx,商品名称xx,商品单价xx.
for cid, info in dict_commodity_infos.items():
if info["price"] < 20000:
print("商品编号%d,商品名称%s,商品单价%d." % (cid, info["name"], info["price"]))
# 4. 打印所有订单中的商品信息,
# 格式:商品名称xx,商品单价:xx,数量xx.
for order in list_orders:
cid = order["cid"]
comodity = dict_commodity_infos[cid]
# comodity = dict_commodity_infos[order["cid"]]
print("商品名称%s,商品单价:%d,数量%d." % (comodity["name"], comodity["price"], order["count"]))
# 5. 查找数量最多的订单(使用自定义算法,不使用内置函数)
max_value = list_orders[0]
for i in range(1, len(list_orders)):
if max_value["count"] < list_orders[i]["count"]:
max_value = list_orders[i]
print(max_value)
# 6. 根据购买数量对订单列表降序(大->小)排列
# 取数据(不要最后一个)
for r in range(len(list_orders) - 1):
# 作比较(下一个)
for c in range(r + 1, len(list_orders)):
if list_orders[r]["count"] > list_orders[c]["count"]:
list_orders[r], list_orders[c] = list_orders[c], list_orders[r]
print(list_orders)
练习四
"""
请排列出所有扑克牌(大小王不算,使用列表存储)
["红桃","黑桃","方片","梅花"]
["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
"""
type_card = ["红桃", "黑桃", "方片", "梅花"]
card_num = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
list_card = [(type, num) for type in type_card for num in card_num]
print(list_card)
练习五
"""
请排列出3个色子可以组合的所有数字
每个色子数字1—6,可以使用range(1,7)表示
"""
# number = []
# for dice01 in range(1, 7):
# for dice02 in range(1, 7):
# for dice03 in range(1, 7):
# number.append((dice01, dice02, dice03))
# print(number)
number = [(dice01, dice02, dice03) for dice01 in range(1, 7) for dice02 in range(1, 7) for dice03 in range(1, 7)]
print(number)
练习六
"""
"""
dict_hobbies = {
"qtx": ["看书", "编码", "旅游"],
"lzmly": ["刷抖音", "看电影"],
"于谦": ["抽烟", "喝酒", "烫头"]
}
# 打印"于谦"的第二个爱好
print(dict_hobbies["于谦"][1])
# 打印qtx所有爱好(一行一个)
for hobbie in dict_hobbies["qtx"]:
print(hobbie)
# 打印lzmly的爱好数量
print(len(dict_hobbies["lzmly"]))
# 打印所有人的所有爱好(一行一个)
for hobbies in dict_hobbies.values():
for hobbie in hobbies:
print(hobbie)
练习七
dict_travel_info = {
"北京": {
"景区": ["长城", "故宫"],
"美食": ["烤鸭", "豆汁胶圈", "炸酱面"]
},
"四川": {
"景区": ["九寨沟", "峨眉山"],
"美食": ["火锅", "兔头"]
}
}
# 1)打印所有城市(一行一个)
for city in dict_travel_info:
print(city)
# 2)打印北京所有美食(一行一个)
for food in dict_travel_info["北京"]["美食"]:
print(food)
# 3)打印四川所有景区(一行一个)
for scenic_area in dict_travel_info["四川"]["景区"]:
print(scenic_area)
# 4)打印所有城市的所有景区(一行一个)
for city in dict_travel_info:
for scenic_area in dict_travel_info[city]["景区"]:
print(scenic_area)
# 5)为北京添加景区:"天坛"
dict_travel_info["北京"]["景区"].append("天坛")
# 6)删除四川美食:兔头
dict_travel_info["四川"]["美食"].remove("兔头")