初面网初面网

集合类型——列表、元组、字典、集合

概念讲解

单个数据用变量存就够了,但如果要存一组数据,就需要集合类型。

Python 提供了四种主要的集合类型,各有用途:

类型可变性有序性用途
list可变有序按顺序存一组数据,需要增删改
tuple不可变有序存一组不变的数据,作为函数返回值
dict可变无序(3.7+按插入顺序)键值对映射,按名字查找
set可变无序存一组不重复的值,用于去重/集合运算

代码示例

列表:学生成绩管理

scores = [85, 92, 78, 96, 88, 73, 91]

# 常用操作
scores.append(82)           # 追加
average = sum(scores) / len(scores)
print(f"平均分: {average:.1f}")

# 筛选出高于平均分的成绩
above_avg = [s for s in scores if s > average]
print(f"高于平均分: {above_avg}")

# 排序(不影响原列表,返回新列表)
sorted_scores = sorted(scores, reverse=True)
print(f"排名: {sorted_scores}")

字典:通讯录

contacts = {
    "Alice": "13800138001",
    "Bob": "13900139002",
    "Charlie": "13700137003"
}

# 按名字查找
name = "Bob"
if name in contacts:
    print(f"{name}: {contacts[name]}")
else:
    print(f"{name} 不在通讯录中")

# 统计单词出现次数(字典的经典用法)
text = "apple banana apple cherry banana apple"
word_count = {}
for word in text.split():
    word_count[word] = word_count.get(word, 0) + 1
print(word_count)  # {'apple': 3, 'banana': 2, 'cherry': 1}

集合:去重与交集

# 两门课的学生名单
course_a = {"Alice", "Bob", "Charlie", "David"}
course_b = {"Charlie", "David", "Eve", "Frank"}

print("两门课都上的学生:", course_a & course_b)   # {'Charlie', 'David'}
print("至少上一门课的学生:", course_a | course_b) # 合并
print("只上A课的学生:", course_a - course_b)      # {'Alice', 'Bob'}

练习题

题目:有一批购物记录,每条记录格式为 "用户名:商品名称

",请统计每个用户购买的商品种类数量。

示例输入:

张三:苹果:3
李四:香蕉:2
张三:香蕉:1
王五:苹果:2
李四:苹果:5
王五:香蕉:3
参考答案
records = [
    "张三:苹果:3",
    "李四:香蕉:2",
    "张三:香蕉:1",
    "王五:苹果:2",
    "李四:苹果:5",
    "王五:香蕉:3"
]

user_items = {}
for record in records:
    user, item, qty = record.split(":")
    if user not in user_items:
        user_items[user] = set()
    user_items[user].add(item)

print("每位用户购买的商品种类数:")
for user, items in user_items.items():
    print(f"  {user}: {len(items)}种({items})")

关键思维:

  • set 自动去重,保证每个商品只被统计一次
  • 字典的 key 是用户名,value 是 set(商品集合)
  • get(user, set()) 是初始化字典的安全写法

更新于 2026/6/7