序列类型是元素有序排列的数据结构,可通过索引访问元素。
有三种基本序列类型:list, tuple 和 range 对象;
列表是可变的,支持增删改操作;
元组是不可变的,创建后不能修改;
List(列表)是Python中一种有序、可变的数据结构,可以存储不同类型的元素。列表用方括号[]
表示,元素之间用逗号分隔。
my_list = [1, "apple", 3.14, True]
列表可以通过直接赋值或使用list()
构造函数创建。
fruits = ["apple", "banana", "cherry"]
numbers = list(range(1, 5)) # 生成[1, 2, 3, 4]
列表元素通过索引访问,索引从0开始。负数索引表示从末尾开始计数。
print(fruits[0]) # 输出"apple"
print(fruits[-1]) # 输出"cherry"
添加元素:
append()
:在末尾添加单个元素。extend()
:添加多个元素(如另一个列表)。insert()
:在指定位置插入元素。fruits.append("orange")
fruits.extend(["grape", "melon"])
fruits.insert(1, "pear")
删除元素:
remove()
:删除指定值的元素。pop()
:删除指定索引的元素并返回其值。del
:删除指定索引或切片。fruits.remove("apple")
popped_item = fruits.pop(2)
del fruits[0:2]
切片用于获取列表的子集,语法为list[start:stop:step]
。
numbers = [0, 1, 2, 3, 4, 5]
subset = numbers[1:4] # 获取[1, 2, 3]
reverse = numbers[::-1] # 反转列表
元组是Python中的一种不可变有序序列,用圆括号()
表示。与列表不同,元组创建后内容不可修改(增删改),但可以嵌套可变对象(如列表)。
示例:
访问元素
通过索引或切片获取元素,索引从0开始:
data = (10, 20, 30)
print(data[1]) # 输出: 20
print(data[:2]) # 输出: (10, 20)
元组一旦创建,不能修改其元素,否则会引发TypeError
:
t = (1, 2)
t[0] = 3 # 错误!不支持修改
计数(count)
统计某元素出现的次数:
t = (1, 2, 2, 3)
print(t.count(2)) # 输出: 2
索引(index)
返回某元素首次出现的索引:
t = ("a", "b", "c")
print(t.index("b")) # 输出: 1
列表转元组
使用tuple()
函数:
list1 = [1, 2, 3]
tuple1 = tuple(list1) # 结果为 (1, 2, 3)
元组转列表
使用list()
函数:
tuple1 = (4, 5)
list1 = list(tuple1) # 结果为 [4, 5]
示例:
def get_coordinates():
return (3, 7)
x, y = get_coordinates() # 解包元组
range()
函数用于生成一个不可变的整数序列,通常用于循环中。
range(stop)
range(start, stop[, step])
示例:
for i in range(5):
print(i) # 输出:0, 1, 2, 3, 4
for i in range(2, 6):
print(i) # 输出:2, 3, 4, 5
for i in range(0, 10, 2):
print(i) # 输出:0, 2, 4, 6, 8
步长为负数时生成递减序列:
for i in range(5, 0, -1):
print(i) # 输出:5, 4, 3, 2, 1
range()
对象可转换为列表
numbers = list(range(3)) # 结果为 [0, 1, 2]
参数必须为整数,不支持浮点数
官方文档——range对象https://docs.python.org/zh-cn/3.12/library/stdtypes.html#ranges
映射类型是键值对(key-value)的无序集合,通过键来访问值。
字典(dict)是最常见的映射类型,键必须是不可变类型(如字符串、数字或元组),值可以是任意类型。
字典支持快速查找、插入和删除操作。
使用花括号{}
或dict()
构造函数创建字典:
dict1 = {'name': 'Alice', 'age': 25} # 直接创建
dict2 = dict(name='Bob', age=30) # 使用dict()
dict3 = dict([('name', 'Charlie'), ('age', 35)]) # 从可迭代对象创建
访问元素
value = dict1['name'] # 获取键'name'对应的值
value = dict1.get('name', 'default') # 安全获取,键不存在时返回默认值
添加/修改元素
dict1['gender'] = 'female' # 添加新键值对
dict1['age'] = 26 # 修改已有键的值
删除元素
del dict1['age'] # 删除指定键
value = dict1.pop('name') # 删除并返回值
dict1.clear() # 清空字典
获取所有键或值
keys = dict1.keys() # 获取所有键的视图
values = dict1.values() # 获取所有值的视图
items = dict1.items() # 获取所有键值对的视图
更新字典
dict1.update({'age': 27, 'city': 'New York'}) # 合并其他字典或键值对
→官方文档——字典←https://docs.python.org/zh-cn/3.12/library/stdtypes.html#mapping-types-dict
Python 中的 set
和 frozenset
是用于存储无序、唯一元素的集合数据类型。set
是可变的,而 frozenset
是不可变的。两者的操作类似,但 set
支持增删操作,而 frozenset
不支持。
使用 {}
或 set()
创建 set
,使用 frozenset()
创建 frozenset
。
s = {1, 2, 3} # 创建 set
fs = frozenset([1, 2]) # 创建 frozenset
以下操作适用于 set
和 frozenset
,除非特别说明。
使用 in
检查元素是否在集合中。
print(2 in s) # True
使用 len()
获取集合元素数量。
print(len(s)) # 3
frozenset
不可变,不支持以下操作。
使用 add()
或 update()
。
s.add(4) # {1, 2, 3, 4}
s.update([5, 6]) # {1, 2, 3, 4, 5, 6}
使用 remove()
、discard()
或 pop()
。
s.remove(1) # 移除 1,若不存在则报错
s.discard(10) # 移除 10,若不存在不报错
s.pop() # 随机移除并返回一个元素
使用 clear()
。
s.clear() # set()
set
和 frozenset
的元素必须是可哈希的类型(如数字、字符串、元组)。序列类型通过索引访问元素,映射类型通过键访问值,集合类型通过成员测试操作。序列和映射类型可以包含重复元素,而集合类型自动去重。序列和集合类型可以是有序或无序的,映射类型通常是无序的。
# 类型对比示例
list_example = [1, 2, 2, 3] # 允许重复
set_example = {1, 2, 2, 3} # 自动去重
dict_example = {'a': 1, 'b': 2} # 键唯一
图片摘自:内置类型 — Python 3.12.10 文档https://docs.python.org/zh-cn/3.12/library/stdtypes.html#sequence-types-list-tuple-range