LeetCode | list、dict、set 有什么区别?

707 字
4 分钟
LeetCode | list、dict、set 有什么区别?

这个文档只整理几个最常见的容器:listdictset,以及字典分组时常用的 defaultdict(list)

简单说:

list -> 存一串东西,关心顺序,可以重复
dict -> 存 key -> value 的对应关系
set -> 存有没有出现过,不重复

list:列表 []#

[] 表示列表,也就是 list

列表适合存一串有顺序的数据,可以有重复元素。

常见操作:

arr.append(x) # 在末尾添加 x
arr.pop() # 删除并返回最后一个元素
arr.remove(x) # 删除第一个等于 x 的元素
arr[i] # 访问第 i 个元素

当你需要保存一组有顺序的数据,或者需要把一组结果收集起来时,用列表。

dict:字典 {}#

{} 通常表示字典,也就是 dict

字典保存的是 key -> value 的对应关系。

mp = {}
mp["aet"] = ["eat", "tea", "ate"]

这里:

key = "aet"
value = ["eat", "tea", "ate"]

常见操作:

mp[key] = value # 修改
mp[key] # 根据 key 取 value
key in mp # 判断 key 是否存在
mp.values() # 取出所有 value
del mp[key] # 删除这个 key

当你想通过一个标识快速找到对应内容时,用字典。

比如在 字母异位词分组 里,可以用排序后的字符串 "aet" 找到对应的一组异位词。

注意:空的 {} 是字典,不是集合。

mp.values()#

mp.values() 取出来的是字典里的所有 value。比如:

mp = {
"aet": ["eat", "tea", "ate"],
"ant": ["tan", "nat"],
"abt": ["bat"],
}
mp.values()

结果可以理解成:

[
["eat", "tea", "ate"],
["tan", "nat"],
["bat"]
]

如果题目要返回普通列表,通常再套一层 list

list(mp.values())

字典分组:defaultdict(list)#

普通字典在 key 不存在时,不能直接这样写:

mp[key].append(st)

因为 mp[key] 还没有对应的列表,会报错。

普通字典需要先判断:

if key not in mp:
mp[key] = []
mp[key].append(st)

defaultdict(list) 可以少写这个判断:

from collections import defaultdict
mp = defaultdict(list)
mp[key].append(st)

它可以理解成一个会自动创建空列表的字典。如果某个 key 还不存在,它会自动给这个 key 准备一个空列表。

当你要做“分组”时,经常可以用它。比如把同一类字符串放进同一个列表里。

set:集合 set()#

set() 表示集合。

集合只关心“有没有这个元素”,不保存重复元素,也不关心顺序。

常见操作:

s.add(x) # 添加 x
s.remove(x) # 删除 x,如果 x 不存在会报错
s.discard(x) # 删除 x,如果 x 不存在也不报错
x in s # 判断 x 是否存在

当你只关心某个东西有没有出现过时,用集合。

比如 无重复字符的最长子串 里,可以用集合记录当前窗口里有哪些字符。

小结#

list -> 有顺序的一串数据
dict -> 通过 key 快速找到 value
set -> 快速判断某个东西有没有出现过

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode | list、dict、set 有什么区别?
https://pinghaoyang.com.cn/posts/leetcode-list-dict-set/
作者
平昊阳
发布于
2026-08-01
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录