前面我们已经学习了数列,元组,集合,字符串。怕大家忘记,我们来复习一下吧。
特性:
可变:可动态增删改元素。
有序:元素按插入顺序排列,允许重复。
语法:用 []
表示,如 [1, 2, "a"]
。
常用操作:
# 增删改
list.append(3) # 末尾添加元素
list.insert(0, "x") # 插入元素
list.pop(1) # 删除索引1的元素
list[0] = 10 # 修改元素
# 切片(左闭右开)
sub_list = list[1:3] # 获取索引1到2的元素
适用场景:需要动态修改的有序数据集合(如用户购物车)。
特性:
不可变:创建后不能增删改元素。
有序:允许重复元素。
语法:用 ()
表示,如 (1, "a", [2,3])
。
单元素元组:必须加逗号,如 (1,)
。
常用操作:
t = (1, 2, 3)
t[0] # 访问元素 → 1
t.index(2) # 查找元素索引 → 1
t.count(2) # 统计元素出现次数 → 1
适用场景:不可变数据(如坐标 (x, y)
)、字典的键、函数返回多个值。
特性:
可变:可增删元素,但元素不可重复。
无序:无索引,不能通过位置访问。
语法:用 {}
表示,如 {1, 2, 3}
。
空集合:必须用 set()
,{}
是空字典。
常用操作:
# 集合运算
a = {1, 2}; b = {2, 3}
a | b # 并集 → {1, 2, 3}
a & b # 交集 → {2}
a - b # 差集 → {1}
# 增删
s.add(4) # 添加元素
s.discard(2) # 删除元素(不报错)
适用场景:去重、成员快速判断(如 if x in set
)。
特性:
不可变:修改会生成新字符串。
有序:字符按顺序排列,支持索引和切片。
语法:用 ''
或 ""
表示,如 "Hello"
。
常用操作:
s = "hello"
s[1:3] # 切片 → "el"
s.upper() # 转大写 → "HELLO"
s.replace("h", "H") # 替换 → "Hello"
s.split("e") # 分割 → ["h", "llo"]
"-".join(["a", "b"]) # 拼接 → "a-b"
特性 | 列表(List) | 集合(Set) | 元组(Tuple) | 字符串(String) |
---|---|---|---|---|
可变性 | ✔️ | ✔️ | ❌ | ❌ |
有序性 | ✔️ | ❌ | ✔️ | ✔️ |
唯一性 | ❌ | ✔️ | ❌ | ❌ |
语法 | [ ] |
{ } |
( ) |
' ' 或 " " |
典型用途 | 动态数据存储 | 去重、集合运算 | 不可变数据 | 文本处理 |
空集合:必须用 set()
,{}
是空字典。
单元素元组:写成 (1,)
,而不是 (1)
。
字符串不可变:s = s + "!"
会生成新字符串,原字符串不变。
元组的元素可变性:若元组包含列表,列表内容可修改。
t = (1, [2, 3])
t[1].append(4) # 允许 → (1, [2, 3, 4])
(2)一句话总结
列表:动态修改的有序工具箱。
集合:去重和集合运算的数学工具。
元组:不可变的“安全数据容器”。
字符串:不可变的文本处理器。
以下是 列表(List)、集合(Set)、元组(Tuple)、字符串(String) 内置方法的对比,重点总结它们的 相同点 和 不同点,帮助你快速掌握核心区别:
(1)通用操作
len()
:获取元素个数(如 len([1,2,3])
→ 3)。
in
关键字:判断元素是否存在(如 "a" in "apple"
→ True
)。
迭代遍历:支持 for
循环(如 for x in [1,2,3]:
)。
+
和 *
:部分支持(列表、元组、字符串可用,集合不可用):
[1,2] + [3] → [1,2,3] # 列表拼接
("a",) * 3 → ("a","a","a") # 元组重复
"hi" * 2 → "hihi" # 字符串重复
(2)部分共有方法:
index()
:查找元素首次出现的索引(列表、元组、字符串支持,集合无序故不支持)。[1,2,3].index(2) → 1
"abc".index("b") → 1
count()
:统计元素出现次数(列表、元组、字符串支持,集合元素唯一故无需此方法)。(1,2,2).count(2) → 2
"apple".count("p") → 2
(1)可变性决定的方法差异
列表(可变):
增删改方法:
append(x)
:末尾添加元素。
insert(i, x)
:在索引 i
处插入元素。
pop(i)
:删除并返回索引 i
的元素。
remove(x)
:删除首个值为 x
的元素。
sort()
:原地排序
lst = [3, 1, 2]
lst.sort() # → [1, 2, 3]
集合(可变):
增删方法:
add(x)
:添加元素。
remove(x)
:删除元素(若不存在报错)。
discard(x)
:删除元素(不报错)。
pop()
:随机删除并返回一个元素(无序性)。
集合运算:
union()
(|
)、intersection()
(&
)、difference()
(-
)。
s = {1, 2}
s.add(3) # → {1, 2, 3}
元组(不可变):
无增删改方法,仅有 count()
和 index()
。
t = (1, 2, 2)
t.count(2) → 2 # 仅查询操作
字符串(不可变):
无原地修改方法,所有操作返回新字符串:
upper()
:转为大写。
replace(old, new)
:替换子串。
split()
:按分隔符分割为列表。
join(iterable)
:拼接可迭代对象中的元素。
s = "hello"
s_new = s.replace("h", "H") # → "Hello"(原字符串不变)
2、独有方法
数据结构 | 独有方法或特性 |
---|---|
列表 | extend() , reverse() , copy() , clear() |
集合 | intersection_update() , symmetric_difference() |
元组 | 无特有方法(因不可变性) |
字符串 | strip() , startswith() , endswith() , format() |
方法/操作 | 列表(List) | 集合(Set) | 元组(Tuple) | 字符串(String) |
---|---|---|---|---|
增删改方法 | ✔️ | ✔️ | ❌ | ❌ |
append() /add() |
✔️(append) | ✔️(add) | ❌ | ❌ |
remove() |
✔️ | ✔️ | ❌ | ❌ |
index() |
✔️ | ❌ | ✔️ | ✔️ |
count() |
✔️ | ❌ | ✔️ | ✔️ |
sort() |
✔️ | ❌ | ❌ | ❌ |
|
❌ | ❌ | ❌ | ✔️ |
集合运算 | ❌ | ✔️ | ❌ | ❌ |
可变性:
列表和集合可动态修改,元组和字符串不可变。
有序性:
列表、元组、字符串有序(支持索引和切片),集合无序。
核心用途:
列表:动态数据集合。
集合:去重和数学运算。
元组:不可变数据容器。
字符串:文本处理和格式化。