(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"] += 10print(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"]= 50d["jim"]= 45d["joan"]= 54d["susan"]= 51d["john"]= 53print(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] += numfor 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 += 1right_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)