跳到主要内容

集合与元组:特殊容器

集合(Set):不重复的容器

集合就像一个"去重器"——扔进去的东西自动去重,而且不保证顺序

加载代码编辑器中……
操作PythonJavaScript
创建{1, 2, 3}new Set([1, 2, 3])
添加.add(x).add(x)
删除.remove(x).delete(x)
包含x in ss.has(x)
交集a & b手动 filter
并集a | bnew Set([...a, ...b])

Python 的集合运算用运算符&, |, -),非常直觉。JS 的 Set 没有这些运算符,需要手动实现——这是 JS 的一个短板。

集合的典型用途:去重

加载代码编辑器中……

JS 的 [...new Set(arr)] 是一个非常优雅的去重技巧,而且保持原始顺序。Python 的 list(set(lst)) 不保证顺序。

元组(Tuple):不可变的列表

Python 有元组(tuple)——创建后就不能修改。JS 没有原生元组(但有冻结数组的方法)。

加载代码编辑器中……
Python tupleJavaScript
语法(1, 2, 3)没有原生元组
不可变✅ 内置保证Object.freeze() 模拟
解包a, b = (1, 2)const [a, b] = [1, 2]
问问 AI

问 AI:"TypeScript 有元组类型吗?和 Python 的元组有什么区别?"

这是一个好问题——因为 TS 的元组 [number, string] 和 Python 的元组在概念上相似但实现完全不同。

🏋️AI 练习

给定两个班级的学生名单:

classA = ["小明", "小红", "小华", "小李"]
classB = ["小红", "小华", "小张", "小王"]

用集合操作求出:

  1. 两个班都有的学生(交集)
  2. 所有不重复的学生(并集)
  3. 只在 A 班不在 B 班的学生(差集)

小结

概念PythonJavaScript
集合{1, 2, 3} 内置运算符new Set() 方法较弱
去重list(set(lst))[...new Set(arr)]
元组(1, 2) 不可变没有原生元组
解包/解构a, b = (1, 2)const [a, b] = [1, 2]

一句话:Python 的集合运算是杀手级特性,JS 的去重一行代码很优雅。元组是 Python 独有的——JS 用数组 + 规范来代替。