【Python 基础】刷题“三剑客”:列表、字典、集合,到底怎么选?

部署运行你感兴趣的模型镜像

👋 前言

Hi 大家好,我是木木。整理了几道 LeetCode 之后,我发现一个真理:算法题做不出来,很多时候不是逻辑不行,而是工具没选对。Python 里最常用的三个数据容器:List(列表)、Dict(字典)、Set(集合),它们就像咱们工具箱里的三剑客,各有各的绝招。今天我们先花 5 分钟把这三位“大将”的底牌摸透,以后看到题就知道该派谁上场了!

⚔️ 一号剑客:列表 (List)

代号[]

特点:有序、可重复、甚至能切片(切开)。

1. 增(怎么往里塞东西?)

li = [1, 2]
​
# append: 乖乖排到队尾(最常用!)
li.append(3)      # 变成 [1, 2, 3]
​
# insert: 强行插队
# 参数:(插在第几个位置, 插什么)
li.insert(0, 99)  # 变成 [99, 1, 2, 3]
​
# extend: 两个队伍合并
# 注意:如果你用 append([4,5]),列表会变成 [..., [4,5]] (列表套列表)
# 用 extend([4,5]),列表才会变成 [..., 4, 5] (元素融合)
li.extend([4, 5]) 

2. 删(怎么把东西踢出去?)

li = [10, 20, 30, 20]
​
# pop: 按位置删(默认删最后一个)
item = li.pop()   # 删掉最后一个,并把它返回给你
li.pop(0)         # 删掉第 0 个位置的元素
​
# remove: 按内容删(只删第一个遇到的)
li.remove(20)     # 删掉第一个 20,后面的 20 还在!
# ⚠️ 注意:如果要删的元素不存在,程序会报错!

3. 查与切片(最强技能!)

li = [10, 20, 30, 40, 50]
​
# 按索引查
print(li[0])   # 第一个
print(li[-1])  # 最后一个(倒数第一)
​
# 切片 Slicing [起点 : 终点 : 步长]
# 口诀:顾头不顾尾(包含起点,不包含终点)
print(li[1:3])   # 取下标 1 到 2 的元素 -> [20, 30]
print(li[:2])    # 从头取到下标 1 -> [10, 20]
print(li[::-1])  # 步长为负数,相当于把列表倒叙!-> [50, 40, ...]

⚠️ 避坑指南

  • 查找速度慢:如果你问列表“这里面有没有 100?”,它得从头到尾挨个翻,速度是 O(N)。如果数据量大,千万别用列表来频繁查数据

  • 越界报错:访问 li[100] 如果超过长度,直接报错 IndexError


🗝️ 二号剑客:字典 (Dictionary)

代号{}

特点:键值对 Key: Value,查找速度快如闪电。

1. 增与改(霸道总裁模式)

字典的“增”和“改”是一个语法。

dct = {"name": "木木", "age": 18}
​
# 如果 Key 不存在 -> 新增
dct["city"] = "Shanghai" 
​
# 如果 Key 已存在 -> 修改(覆盖旧值)
dct["age"] = 19 

2. 查(安全第一!)

# 方法 A:直接查(有风险)
print(dct["name"]) 
# ⚠️ 风险:如果查一个不存在的 Key,比如 dct["height"],会直接报错 Crash!
​
# 方法 B:用 get() 方法(木木推荐 ✅)
print(dct.get("height")) 
# ✅ 安全:如果 Key 不存在,它会返回 None,不会报错。
print(dct.get("height", 160))
# ✅ 贴心:如果不存在,还可以返回一个默认值 160。

3. 遍历(怎么把字典里的东西都倒出来?)

这是刷题时最常用的循环写法:

dct = {"A": 1, "B": 2}
​
# 只拿 Key
for key in dct.keys():
    print(key)
​
# 只拿 Value
for val in dct.values():
    print(val)
​
# 同时拿 Key 和 Value(最常用!)
for key, val in dct.items():
    print(key, val)

⚠️ 避坑指南

  • Key 不能变:列表 [] 不能当 Key,但元组 () 可以。

  • 无序性:虽然 Python 3.7+ 记住了插入顺序,但做题时最好把字典当成无序的,不要依赖它的顺序。

🎒 三号剑客:集合 (Set)

代号set()

特点:去重、无序、只有 Key。

1. 增与删

s = {1, 2, 3}
​
# add: 添加
s.add(4)
​
# remove: 删除(狠人)
# 如果删的东西不存在,会报错 KeyError
s.remove(2)
​
# discard: 丢弃(温柔)
# 如果删的东西不存在,它就当无事发生,不会报错(推荐 ✅)
s.discard(99) 

2. 集合运算(高级玩法)

虽然叫“基础”,但这个功能在某些题里有奇效:

set1 = {1, 2, 3}
set2 = {3, 4, 5}
​
# 交集(找共同好友):&
print(set1 & set2)  # {3}
​
# 并集(两家人合照):|
print(set1 | set2)  # {1, 2, 3, 4, 5}
​
# 差集(我有你没有):-
print(set1 - set2)  # {1, 2} (在 set1 里去掉 set2 有的)

3. 一键去重(必杀技)

这是集合出场率最高的场景:

nums = [1, 2, 2, 3, 3, 3]
​
# 列表 -> 集合(去重) -> 列表
unique_nums = list(set(nums))
print(unique_nums) # [1, 2, 3]

⚠️ 避坑指南

  • 不能索引s[0] 是错的!因为它没顺序。

  • 空集合怎么建s = {} 建的是空字典s = set() 才是空集合。这是新手必踩的坑!

📊 终极对决:到底怎么选?

这是我整理的一张“作弊表”,做题时不知道用啥,看这张图就够了!

特性List 列表Dict 字典Set 集合
长相[1, 2]{"a": 1}{1, 2}
是否有序✅ 有序❌ 无序 (视作)❌ 无序
能否重复✅ 能❌ Key不能重复❌ 不能
查找速度🐢 慢 O(N)🚀 快 O(1)🚀 快 O(1)
适用场景需要顺序、存一般数据需要键值对应、存关联数据需要去重、快速查是否存在

🧠 木木总结

  • 要想顺序存数据,用 列表

  • 要想根据 A B,用 字典

  • 要想去重或者只在乎有木有,用 集合

磨刀不误砍柴工,把这三个工具用顺手了,刷题难度直接减半!大家加油!💪

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值