2026/7/22 4:42:32

python中的五种基本数据结构

python中的五种基本数据结构 1. 引言Python 作为一门简洁高效的编程语言其内置的数据结构是编程基础的核心。掌握str字符串、list列表、tuple元组、dict字典和set集合这五种基本数据结构是编写高质量 Python 代码的关键。本文将对这五种数据结构进行系统性汇总涵盖其特性、常用操作、适用场景及性能考量帮助您构建扎实的 Python 基础。2. 字符串str字符串是 Python 中最常用的数据类型之一用于表示文本信息。2.1 基本特性不可变性字符串创建后不能修改任何修改操作都会返回一个新的字符串。有序序列字符串中的字符按顺序排列支持索引和切片。Unicode 编码Python 3 默认使用 Unicode支持多语言字符。2.2 创建与表示# 创建字符串s1单引号字符串s2双引号字符串s3多行 字符串s4双引号 多行字符串2.3 常用操作# 索引与切片textPython数据结构print(text[0])# P - 正向索引print(text[-1])# 构 - 负向索引print(text[0:6])# Python - 切片print(text[6:])# 数据结构 - 从索引6到末尾# 字符串方法s Hello, World! print(s.strip())# Hello, World! - 去除两端空格print(s.lower())# hello, world! - 转小写print(s.upper())# HELLO, WORLD! - 转大写print(s.replace(World,Python))# Hello, Python! print(s.split(,))# [ Hello, World! ] - 分割print(Python.find(th))# 2 - 查找子串位置# 格式化nameAliceage25print(f姓名{name}年龄{age})# f-string推荐print(姓名{}年龄{}.format(name,age))# format方法2.4 适用场景文本处理、日志记录、用户输入处理配置文件读取、数据序列化JSON、XML正则表达式匹配、模板渲染3. 列表list列表是 Python 中最灵活、最常用的可变序列。3.1 基本特性可变性可以随时添加、删除或修改元素。有序性元素按插入顺序存储支持索引。异构性可以包含不同类型的元素。动态扩容自动管理内存无需预先指定大小。3.2 创建与基本操作# 创建列表list1[]# 空列表list2[1,2,3,4,5]# 整数列表list3[a,b,c]# 字符串列表list4[1,hello,3.14,True]# 混合类型列表list5list(range(10))# 使用list()构造函数# 列表推导式高效创建squares[x**2forxinrange(10)]# [0, 1, 4, 9, ..., 81]even_numbers[xforxinrange(20)ifx%20]3.3 常用操作# 增删改查my_list[1,2,3,4,5]# 增加元素my_list.append(6)# 末尾添加: [1, 2, 3, 4, 5, 6]my_list.insert(2,99)# 指定位置插入: [1, 2, 99, 3, 4, 5, 6]my_list.extend([7,8,9])# 扩展列表: [1, 2, 99, 3, 4, 5, 6, 7, 8, 9]# 删除元素poppedmy_list.pop()# 删除并返回最后一个元素: 9removedmy_list.pop(2)# 删除索引2的元素: 99my_list.remove(3)# 删除第一个值为3的元素delmy_list[0:2]# 删除切片范围内的元素# 修改元素my_list[0]100# 直接赋值修改# 查找与判断print(5inmy_list)# True - 成员检查print(my_list.index(4))# 返回第一个值为4的索引print(my_list.count(5))# 统计值为5的元素个数# 排序与反转nums[3,1,4,1,5,9,2]nums.sort()# 原地排序: [1, 1, 2, 3, 4, 5, 9]sorted_numssorted(nums,reverseTrue)# 降序排序返回新列表nums.reverse()# 原地反转3.4 列表切片高级用法my_list[0,1,2,3,4,5,6,7,8,9]# 基本切片print(my_list[2:5])# [2, 3, 4]print(my_list[:5])# [0, 1, 2, 3, 4]print(my_list[5:])# [5, 6, 7, 8, 9]print(my_list[::2])# [0, 2, 4, 6, 8] - 步长为2print(my_list[::-1])# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] - 反转# 切片赋值修改多个元素my_list[2:5][20,30,40]# 替换切片范围内的元素my_list[1:1][11,12,13]# 在索引1处插入多个元素3.5 适用场景存储有序数据集合如日志记录、时间序列实现栈append/pop和队列collections.deque临时存储需要频繁修改的数据数据预处理和转换4. 元组tuple元组是不可变的序列通常用于存储不可修改的数据集合。4.1 基本特性不可变性创建后不能修改确保数据安全。有序性元素按定义顺序存储支持索引。轻量级比列表更节省内存创建速度更快。可哈希性如果所有元素都是可哈希的元组本身也可哈希可作为字典键。4.2 创建与使用# 创建元组t1()# 空元组t2(1,2,3)# 多个元素t31,2,3# 括号可省略逗号是关键t4(42,)# 单元素元组必须有逗号t5tuple([1,2,3])# 从列表转换# 元组解包强大特性point(10,20)x,ypoint# x10, y20# 交换变量值a,b1,2a,bb,a# a2, b1# 函数返回多个值defget_stats(numbers):returnmin(numbers),max(numbers),sum(numbers)/len(numbers)minimum,maximum,averageget_stats([1,2,3,4,5])4.3 常用操作my_tuple(1,2,3,2,4,2,5)# 索引与切片与列表相同print(my_tuple[0])# 1print(my_tuple[-1])# 5print(my_tuple[1:4])# (2, 3, 2)# 查找与统计print(3inmy_tuple)# Trueprint(my_tuple.index(2))# 1 - 第一个2的索引print(my_tuple.count(2))# 3 - 2出现的次数# 元组拼接创建新元组t1(1,2,3)t2(4,5,6)t3t1t2# (1, 2, 3, 4, 5, 6)t4t1*2# (1, 2, 3, 1, 2, 3)4.4 命名元组collections.namedtuplefromcollectionsimportnamedtuple# 定义命名元组类型Pointnamedtuple(Point,[x,y])Colornamedtuple(Color,[red,green,blue,alpha])# 创建实例pPoint(10,20)cColor(255,0,0,255)# 访问元素print(p.x,p.y)# 10 20比p[0], p[1]更清晰print(c.red,c.alpha)# 255 255# 转换为字典print(p._asdict())# {x: 10, y: 20}# 替换字段值创建新实例p2p._replace(x30)# Point(x30, y20)4.5 适用场景函数返回多个值字典键需要不可变、可哈希的值配置参数、常量定义保证数据不被意外修改数据库查询结果记录行5. 字典dict字典是 Python 中最重要的数据结构之一用于存储键值对映射。5.1 基本特性键值对存储每个元素包含一个键和一个值。无序性Python 3.7 保持插入顺序但本质仍是基于哈希表。键的唯一性键必须是不可变类型字符串、数字、元组。高效查找基于哈希表实现平均 O(1) 时间复杂度查找。动态扩容自动调整大小以适应更多元素。5.2 创建与初始化# 创建字典d1{}# 空字典d2{name:Alice,age:25}# 直接定义d3dict(nameBob,age30)# 使用dict()构造函数d4dict([(name,Charlie),(age,35)])# 从键值对列表d5dict.fromkeys([a,b,c],0)# 相同初始值: {a:0, b:0, c:0}# 字典推导式squares{x:x**2forxinrange(5)}# {0:0, 1:1, 2:4, 3:9, 4:16}even_squares{x:x**2forxinrange(10)ifx%20}5.3 常用操作person{name:Alice,age:25,city:Beijing}# 访问元素print(person[name])# Alice - 直接访问print(person.get(age))# 25 - 使用get方法print(person.get(country,China))# China - 提供默认值# 添加与修改person[email]aliceexample.com# 添加新键值对person[age]26# 修改已有键的值person.update({city:Shanghai,job:Engineer})# 批量更新# 删除元素emailperson.pop(email)# 删除并返回值itemperson.popitem()# 删除并返回最后一对键值Python 3.7delperson[city]# 删除指定键person.clear()# 清空字典# 遍历字典forkeyinperson:# 遍历键print(key,person[key])forkey,valueinperson.items():# 遍历键值对print(f{key}:{value})forvalueinperson.values():# 遍历值print(value)# 检查键是否存在print(nameinperson)# Trueprint(countrynotinperson)# True5.4 字典视图对象person{name:Alice,age:25,city:Beijing}keys_viewperson.keys()# dict_keys([name, age, city])values_viewperson.values()# dict_values([Alice, 25, Beijing])items_viewperson.items()# dict_items([(name, Alice), ...])# 视图是动态的person[job]Engineerprint(list(keys_view))# [name, age, city, job]# 集合操作仅keys视图支持d1{a:1,b:2,c:3}d2{b:2,c:3,d:4}print(d1.keys()d2.keys())# {b, c} - 交集print(d1.keys()-d2.keys())# {a} - 差集5.5 默认字典collections.defaultdictfromcollectionsimportdefaultdict# 默认值为0的字典word_countdefaultdict(int)forwordin[apple,banana,apple,orange,banana,apple]:word_count[word]1# defaultdict(class int, {apple: 3, banana: 2, orange: 1})# 默认值为列表的字典group_by_lengthdefaultdict(list)words[apple,bat,cat,elephant,dog]forwordinwords:group_by_length[len(word)].append(word)# defaultdict(class list, {5: [apple], 3: [bat, cat, dog], 8: [elephant]})5.6 适用场景缓存、备忘录Memoization配置管理、环境变量数据库查询结果映射统计计数、分组聚合对象属性存储6. 集合set集合是无序、不重复元素的容器基于哈希表实现。6.1 基本特性无序性元素没有固定顺序Python 3.7 保持插入顺序但不保证。唯一性自动去重每个元素只出现一次。可变性set可变frozenset不可变。高效成员检查平均 O(1) 时间复杂度。支持集合运算并集、交集、差集等。6.2 创建与初始化# 创建集合s1set()# 空集合不能用{}{}是空字典s2{1,2,3,4,5}# 直接定义s3set([1,2,2,3,3,4])# 从列表去重: {1, 2, 3, 4}s4set(hello)# 从字符串: {h, e, l, o}# 集合推导式even_squares{x**2forxinrange(10)ifx%20}# {0, 4, 16, 36, 64}6.3 常用操作# 基本操作s{1,2,3,4,5}# 添加元素s.add(6)# {1, 2, 3, 4, 5, 6}s.update([7,8,9])# 添加多个元素# 删除元素s.remove(3)# 删除元素3不存在则报错s.discard(10)# 删除元素10不存在也不报错poppeds.pop()# 随机删除并返回一个元素s.clear()# 清空集合# 集合运算A{1,2,3,4,5}B{4,5,6,7,8}print(A|B)# {1, 2, 3, 4, 5, 6, 7, 8} - 并集print(AB)# {4, 5} - 交集print(A-B)# {1, 2, 3} - 差集在A不在Bprin