(1)列表和元组的区别是什么?如何从列表创建元组?如何从元组创建列表?
列表和元组的区别:
- 可变性:列表是可变的,即可以对列表进行元素的增、删、改操作。例如,可以使用
append()
方法添加元素,remove()
方法删除元素,通过索引修改元素值。而元组是不可变的,一旦创建,其元素内容和数量都不能改变,尝试修改元组元素会引发错误。- 语法表示:列表使用方括号
[]
来表示,如my_list = [1, 2, 3]
;元组使用圆括号()
来表示,如my_tuple = (1, 2, 3)
,不过在创建只包含一个元素的元组时,需要在元素后面加逗号,如single_tuple = (1,)
,否则(1)
会被视为整数1
。- 应用场景:由于列表的可变性,常用于需要频繁修改数据的场景,如动态存储用户输入的数据。元组的不可变性使其更适合存储一些固定不变的数据,比如坐标值、函数的多个返回值等,同时元组还可作为字典的键,因为字典键要求是不可变类型。
- 性能:在创建相同内容的数据时,元组的创建时间和占用内存空间通常比列表小。因为列表除了存储元素外,还需额外存储长度、闲置位置等信息。
从列表创建元组 可以使用内置函数
tuple()
,将列表作为参数传入,即可将列表转换为元组。从元组创建列表 使用内置函数
list()
,把元组作为参数传入,就能将元组转换为列表。
(2)下面代码的错误是什么?
t=(1,2.3)
t.append(4)
t.remove(0)
t[0]=1
元组是不可变的,不能进行添加、删除操作。
(3)下面的代码正确吗?
t1 = (1,2,3,7,9,0,5)
t2 = (1,2,5)
t1 = t2
正确,t2赋值给t1。
(4)给出下面代码的输出?
t1=(1,2,3,7,9,0,5)
t2=(1,3,22,7,9,0,5)
print(t1 == t2)
print(t1 != t2)
print(t1 > t2)
print(t1 < t2)
False
True
False
True
(5)列表、集合或元组能有不同类型的元素吗?
列表和元组可以有不同类型的元素
集合里面的元素必须是可哈希的(即不可变类型)
(6)下面哪个集合是被正确创建的?
s ={1,3,4}
s ={{1,2},{4,5}}
s ={[1,2],[4,5]}
s ={(1,2),(4,5)}
1 4集合是被正确创建的
(7)给出下面代码的输出。
students ={"peter","john"}
print(students)
students.add("john")
print(students)
students.add("peterson")
print(students)
students.remove("peter")
print(students)
{‘peter’, ‘john’}
{‘peter’, ‘john’}
{‘peter’, ‘john’, ‘peterson’}
{‘john’, ‘peterson’}
(8)给出下面代码的输出。
student1 ={"peter","john","tim"}
student2 ={"peter","johnson","tim"}
print(student1.issuperset({"john"}))
print(studentl.issubset(student2))
print({1,2,3} > {1,2,4})
print({1,2,3} < {1,2,4})
print({1,2} < {1,2,4})
print({1,2} <= {1,2,4})
True
False
False
False
True
True
(9)给出下面代码的输出。
s1={1,4,5,6}
s2={1,3,6,7}
print(s1.union(s2))
print(s1 | s2)
print(s1.intersection(s2))
print(s1 & s2)
print(s1.difference(s2))
print(s1 - s2)
print(s1.symmetric_difference(s2))
print(s1 ^ s2)
{1, 3, 4, 5, 6, 7}
{1, 3, 4, 5, 6, 7}
{1, 6}
{1, 6}
{4, 5}
{4, 5}
{3, 4, 5, 7}
{3, 4, 5, 7}
(10)给出下面代码的输出。
set1 = {1,2,3}
set2 = {3,4,5}
set3 = set1 | set2
print(set1,set2,set3)
set3 = set1 - set2
print(set1,set2,set3)
set3=set1 & set2
print(set1,set2,set3)
set3=set1 ^ set2
print(set1,set2,set3)
{1, 2, 3} {3, 4, 5} {1, 2, 3, 4, 5}
{1, 2, 3} {3, 4, 5} {1, 2}
{1, 2, 3} {3, 4, 5} {3}
{1, 2, 3} {3, 4, 5} {1, 2, 4, 5}
(11)下面哪个字典是被正确创建的?
d={1:[1,2],3:[3,4]}
d={[1,2]:1,[3,4]:3}
d={(1,2):1,(3,4):3}
d={1:"john", 3:"peter"}
d={"john":1,"peter":3}
1 3 4 5被正确创建
(12)假设一个名为 students 的字典是 {“john”:3,“peter”:2}。下面的语句实现什么功能?
(a) print(len(students))
(b) print(students.keys())
(c) print(students.values())
(d) print(students.items())
(a) 打印字典student的长度:2
(b)打印字典的键:dict_keys([‘john’, ‘peter’])
©打印字典的值:dict_values([3, 2])
(d)打印字典的键值对:dict_items([(‘john’, 3), (‘peter’, 2)])
(13)给出下面代码的输出。
def main():
d = {"red":4,"blue":1,"green":14,"yellow":2}
print(d["red"])
print(list(d.keys()))
print(list(d.values))
print("blue" in d)
print("purple" in d)
d["blue"] += 10
print(d["blue"])
main() #Call the main function
4
[‘red’, ‘blue’, ‘green’, ‘yellow’]
[4, 1, 14, 2]
True
False
11
(14)给出下面代码的输出。
def main():
d = {}
d["susan"]= 50
d["jim"]= 45
d["joan"]= 54
d["susan"]= 51
d["john"]= 53
print(len(d))
main() #Call the main function
4
二、编程题
(15)学生成绩统计
学校记录了学生们多门课程的成绩,每门课程成绩以字典形式存储,学生姓名作为键,成绩作为值。现在需要统计每个学生的平均成绩,并找出平均成绩最高的学生。
# 每门课学生的成绩
course_scores = [
{'Alice': 85, 'Bob': 90, 'Charlie': 78},
{'Alice': 92, 'Bob': 88, 'Charlie': 85},
{'Alice': 79, 'Bob': 94, 'Charlie': 82}
]
# 每门课学生的成绩
course_scores = [
{'Alice': 85, 'Bob': 90, 'Charlie': 78},
{'Alice': 92, 'Bob': 88, 'Charlie': 85},
{'Alice': 79, 'Bob': 94, 'Charlie': 82}
]
dic_course_scores = {}
#遍历列表 即获取每一组字典
for i in range(len(course_scores)):
#遍历字典 取每一组键值
for key, values in course_scores[i].items():
# 判断当前学生是否在新字典中,如果不存在则记录
if key not in dic_course_scores:
dic_course_scores[key] = values
#存在 求新的平均值
else:
dic_course_scores[key] = (dic_course_scores[key] + values) / (i + 1)
#找出平均成绩最高的学生姓名
max_key = max(dic_course_scores, key = dic_course_scores.get)
print(f"每个学生的平均成绩为{dic_course_scores}")
print(f"平均成绩最高的学生是:{max_key}")
(16)商品库存管理
一家商店有多个商品的库存信息,以字典形式存储,键为商品名称,值为库存数量。每天会有新的进货和销售记录,需要更新库存信息。如果库存数量变为负数,则输出警告信息。
# 初始货物量
inventory = {'苹果': 100, '香蕉': 80, '橙子': 120}
# 进货/销售记录
transactions = [
{'苹果': -20, '香蕉': 30},
{'橙子': -50, '苹果': 10}
]
# 初始货物量
inventory = {'苹果': 100, '香蕉': 80, '橙子': 120}
# 进货/销售记录
transactions = [
{'苹果': -220, '香蕉': 30},
{'橙子': -50, '苹果': 10, '西瓜': 50}
]
for goods in transactions:
# 遍历交易中的商品和数量
for fruits, num in goods.items():
if fruits not in inventory:
inventory[fruits] = 0
# 更新
inventory[fruits] += num
for fruit in inventory:
# 检查库存
if inventory[fruit] < 0:
print(f"{fruit}库存不够,请及时补充!!!")
print(inventory)
(17)社交网络好友关系【录制讲解】
视频链接::https://meeting.tencent.com/crm/KDLyo5PXf2
在一个社交网络中,用户之间的好友关系用字典表示,键为用户名称,值为该用户的好友集合。现在需要找出哪些用户是所有用户的共同好友。
# 好友关系表
friendships = {
'Alice': {'Bob', 'Charlie', 'David'},
'Bob': {'Alice', 'Charlie'},
'Charlie': {'Alice', 'Bob', 'David'},
'David': {'Alice', 'Charlie'}
}
# 好友关系表
friendships = {
'Alice': {'Bob', 'Charlie', 'David'},
'Bob': {'Alice', 'Charlie'},
'Charlie': {'Alice', 'Bob', 'David'},
'David': {'Alice', 'Charlie'}
}
for user in friendships.keys():
friendships[user].add(user)
common_friends = set(friendships[list(friendships.keys())[0]])
for friends in friendships.values():
common_friends = common_friends & set(friends)
print(common_friends)
(18)在线游戏玩家组队匹配
在线游戏中有多个玩家,每个玩家有不同的游戏角色和技能等级,用字典表示,键为玩家名,值为角色和技能等级的字典。现在要根据玩家的角色和技能等级进行组队匹配,使每个队伍的综合实力尽量均衡。
# 玩家数据
players = {
'Player1': {'Warrior': 80, 'Mage': 20},
'Player2': {'Warrior': 30, 'Mage': 70},
'Player3': {'Warrior': 60, 'Mage': 40},
'Player4': {'Warrior': 40, 'Mage': 60}
}
# 玩家信息字典,键为玩家名,值为角色和对应技能等级的字典
game_players = {
'Player1': {'Warrior': 80, 'Mage': 20},
'Player2': {'Warrior': 30, 'Mage': 70},
'Player3': {'Warrior': 60, 'Mage': 40},
'Player4': {'Warrior': 40, 'Mage': 60}
}
# 用于存储每个玩家综合实力的字典
player_power_dict = {}
# 计算每个玩家的综合实力,即各角色技能等级之和
for gamer, skills in game_players.items():
total_power = sum(skills.values())
player_power_dict[gamer] = total_power
# 分别提取玩家名列表和对应的综合实力值列表
player_names = list(player_power_dict.keys())
player_powers = list(player_power_dict.values())
# 使用冒泡排序对玩家按综合实力从高到低排序
n = len(player_powers)
for i in range(n - 1):
for j in range(0, n - i - 1):
if player_powers[j] < player_powers[j + 1]:
player_powers[j], player_powers[j + 1] = player_powers[j + 1], player_powers[j]
player_names[j], player_names[j + 1] = player_names[j + 1], player_names[j]
# 初始化左右指针,用于组队
left_index = 0
right_index = len(player_names) - 1
# 进行组队匹配,输出组队结果
while left_index < right_index:
print({player_names[left_index]}, {player_names[right_index]})
left_index += 1
right_index -= 1
(19)餐厅菜品搭配分析
餐厅有多个菜品分类,每个分类有不同的菜品,用字典表示,键为分类名,值为菜品集合。现在要找出所有可能的菜品搭配,每个搭配包含主菜、配菜和饮品。
# 菜品分类信息
menu_categories = {
'主菜': {'牛排', '披萨', '寿司'},
'配菜': {'薯条', '沙拉', '烤蔬菜'},
'饮品': {'可乐', '咖啡', '果汁'}
}
menu_categories = {
'主菜': {'牛排', '披萨', '寿司'},
'配菜': {'薯条', '沙拉', '烤蔬菜'},
'饮品': {'可乐', '咖啡', '果汁'}
}
for zhucai in menu_categories['主菜']:
for peicai in menu_categories['配菜']:
for drink in menu_categories['饮品']:
print(f"主菜:{zhucai}, 配菜:{peicai}, 饮品:{drink}")
(20)科研项目人员分配优化【录制讲解】
视频链接: https://meeting.tencent.com/crm/NbVzmYpJ5a
有多个科研项目,每个项目需要不同技能的人员,用字典表示,键为项目名,值为所需技能集合。同时有多个研究人员,每个人员具备的技能也用集合表示。现在要为每个项目分配合适的人员,使每个项目尽量满足所需技能。
# 项目及技能需求
projects = {
'ProjectA': {'Python', '数据分析', '机器学习'},
'ProjectB': {'Java', '数据库管理', '算法设计'},
'ProjectC': {'C++', '图像处理', '计算机视觉'}
}
# 人员及具备技能
researchers = {
'Researcher1': {'Python', '数据分析'},
'Researcher2': {'Java', '数据库管理'},
'Researcher3': {'C++', '图像处理'},
'Researcher4': {'机器学习', '算法设计', '计算机视觉'}
}
# 项目及技能需求
projects = {
'ProjectA': {'Python', '数据分析', '机器学习'},
'ProjectB': {'Java', '数据库管理', '算法设计'},
'ProjectC': {'C++', '图像处理', '计算机视觉'}
}
# 人员及具备技能
researchers = {
'Researcher1': {'Python', '数据分析'},
'Researcher2': {'Java', '数据库管理'},
'Researcher3': {'C++', '图像处理'},
'Researcher4': {'机器学习', '算法设计', '计算机视觉'}
}
dic = {}
for key_pro, values_pro in projects.items():
for key_res, values_res in researchers.items():
if values_pro & values_res:
if key_pro not in dic:
dic[key_pro] = []
dic[key_pro].append(key_res)
print(dic)