欢迎光临
我们一直在努力

Python入门:Python3 数据结构全面学习教程

在这里插入图片描述

在这里插入图片描述

Python入门:Python3 数据结构全面学习教程

Python入门:Python3 数据结构全面学习教程,本文详细介绍Python3常用数据结构及遍历技巧。列表为可变序列,含丰富操作方法,可实现栈和队列,还可通过推导式及嵌套解析高效处理数据,del语句能删除元素或变量。元组是不可变序列,由逗号分隔值组成,可嵌套。集合为无序不重复元素集,支持关系测试和推导式。字典以键值对存储,关键字不可变且唯一,有多种构造方式。此外,还讲解了字典、序列等的遍历技巧,如用items()、enumerate()、zip()等函数,助力高效编程。

在这里插入图片描述

前言

    Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。

在这里插入图片描述


在这里插入图片描述

🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。

🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。

🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。

🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。

🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。


Python3 数据结构全面学习教程


🌐 前篇文章咱们讲解了 Python入门:Python3 装饰器全面学习教程 ,如果忘记了,可以去重温一下,不停的重复敲击基础代码,有助于让你更加熟练掌握一门语言。今天咱们学习 Python3 数据结构全面学习教程,下面开始吧!

在 Python 编程中,数据结构是处理和组织数据的基础。掌握好各种数据结构的特性和用法,能让我们更高效地编写代码。本文将详细介绍 Python3 中常用的数据结构,包括列表、元组、集合、字典等,以及它们的操作方法和实际应用场景。

一、列表(List)

列表是 Python 中最常用的数据结构之一,它是可变的,这也是它与字符串和元组最显著的区别,即列表可以修改,而字符串和元组不能。

列表的常用方法

列表提供了丰富的方法来操作元素,如下表所示:

方法描述
list.append(x) 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]
list.extend(L) 通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L
list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引
list.remove(x) 删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误
list.pop([i]) 从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素
list.clear() 移除列表中的所有项,等于del a[:]
list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误
list.count(x) 返回 x 在列表中出现的次数
list.sort() 对列表中的元素进行排序
list.reverse() 倒排列表中的元素
list.copy() 返回列表的浅复制,等于a[:]

列表方法示例演示

下面通过一个实例来演示列表的大部分方法:

a = [66.25, 333, 333, 1, 1234.5]
print(a.count(333), a.count(66.25), a.count('x')) # 输出:2 1 0
a.insert(2, –1)
a.append(333)
print(a) # 输出:[66.25, 333, -1, 333, 1, 1234.5, 333]
print(a.index(333)) # 输出:1
a.remove(333)
print(a) # 输出:[66.25, -1, 333, 1, 1234.5, 333]
a.reverse()
print(a) # 输出:[333, 1234.5, 1, 333, -1, 66.25]
a.sort()
print(a) # 输出:[-1, 1, 66.25, 333, 333, 1234.5]

需要注意的是,类似 insert、remove 或 sort 等修改列表的方法没有返回值。

将列表当作栈使用

栈是一种后进先出(LIFO, Last-In-First-Out)的数据结构,意味着最后添加的元素最先被移除。在 Python 中,可以使用列表来实现栈的功能,主要用到 append() 和 pop() 方法。

栈的基本操作及实现如下:

  • 创建一个空栈
  • stack = []

  • 压入(Push)操作:使用 append() 方法将元素添加到栈的顶端
  • stack.append(1)
    stack.append(2)
    stack.append(3)
    print(stack) # 输出: [1, 2, 3]

  • 弹出(Pop)操作:使用 pop() 方法移除并返回栈顶元素
  • top_element = stack.pop()
    print(top_element) # 输出: 3
    print(stack) # 输出: [1, 2]

  • 查看栈顶元素(Peek/Top):直接访问列表的最后一个元素(不移除)
  • top_element = stack[–1]
    print(top_element) # 输出: 2

  • 检查是否为空(IsEmpty):检查列表是否为空
  • is_empty = len(stack) == 0
    print(is_empty) # 输出: False

  • 获取栈的大小(Size):使用 len() 函数获取栈中元素的数量
  • size = len(stack)
    print(size) # 输出: 2

    我们还可以封装一个 Stack 类来实现栈的功能:

    class Stack:
    def __init__(self):
    self.stack = []
    def push(self, item):
    self.stack.append(item)
    def pop(self):
    if not self.is_empty():
    return self.stack.pop()
    else:
    raise IndexError("pop from empty stack")
    def peek(self):
    if not self.is_empty():
    return self.stack[–1]
    else:
    raise IndexError("peek from empty stack")
    def is_empty(self):
    return len(self.stack) == 0
    def size(self):
    return len(self.stack)

    # 使用示例
    stack = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    print("栈顶元素:", stack.peek()) # 输出: 栈顶元素: 3
    print("栈大小:", stack.size()) # 输出: 栈大小: 3
    print("弹出元素:", stack.pop()) # 输出: 弹出元素: 3
    print("栈是否为空:", stack.is_empty()) # 输出: 栈是否为空: False
    print("栈大小:", stack.size()) # 输出: 栈大小: 2

    将列表当作队列使用

    队列是一种先进先出(FIFO, First-In-First-Out)的数据结构,意味着最早添加的元素最先被移除。

    使用列表直接实现队列并不是最优选择,因为在列表开头插入或删除元素的时间复杂度是 O(n)。Python 提供了 collections.deque,它是双端队列,可以在两端高效地添加和删除元素,时间复杂度为 O(1)。

    使用 collections.deque 实现队列

    from collections import deque
    # 创建一个空队列
    queue = deque()
    # 向队尾添加元素
    queue.append('a')
    queue.append('b')
    queue.append('c')
    print("队列状态:", queue) # 输出: 队列状态: deque(['a', 'b', 'c'])
    # 从队首移除元素
    first_element = queue.popleft()
    print("移除的元素:", first_element) # 输出: 移除的元素: a
    print("队列状态:", queue) # 输出: 队列状态: deque(['b', 'c'])
    # 查看队首元素(不移除)
    front_element = queue[0]
    print("队首元素:", front_element) # 输出: 队首元素: b
    # 检查队列是否为空
    is_empty = len(queue) == 0
    print("队列是否为空:", is_empty) # 输出: 队列是否为空: False
    # 获取队列大小
    size = len(queue)
    print("队列大小:", size) # 输出: 队列大小: 2

    使用列表实现队列

    虽然 deque 更高效,但也可以使用列表来实现队列:

  • 创建队列
  • queue = []

  • 向队尾添加元素:使用 append() 方法
  • queue.append('a')
    queue.append('b')
    queue.append('c')
    print("队列状态:", queue) # 输出: 队列状态: ['a', 'b', 'c']

  • 从队首移除元素:使用 pop(0) 方法
  • first_element = queue.pop(0)
    print("移除的元素:", first_element) # 输出: 移除的元素: a
    print("队列状态:", queue) # 输出: 队列状态: ['b', 'c']

  • 查看队首元素(不移除):直接访问列表的第一个元素
  • front_element = queue[0]
    print("队首元素:", front_element) # 输出: 队首元素: b

  • 检查队列是否为空
  • is_empty = len(queue) == 0
    print("队列是否为空:", is_empty) # 输出: 队列是否为空: False

  • 获取队列大小
  • size = len(queue)
    print("队列大小:", size) # 输出: 队列大小: 2

    也可以封装一个 Queue 类:

    class Queue:
    def __init__(self):
    self.queue = []
    def enqueue(self, item):
    self.queue.append(item)
    def dequeue(self):
    if not self.is_empty():
    return self.queue.pop(0)
    else:
    raise IndexError("dequeue from empty queue")
    def peek(self):
    if not self.is_empty():
    return self.queue[0]
    else:
    raise IndexError("peek from empty queue")
    def is_empty(self):
    return len(self.queue) == 0
    def size(self):
    return len(self.queue)

    # 使用示例
    queue = Queue()
    queue.enqueue('a')
    queue.enqueue('b')
    queue.enqueue('c')
    print("队首元素:", queue.peek()) # 输出: 队首元素: a
    print("队列大小:", queue.size()) # 输出: 队列大小: 3
    print("移除的元素:", queue.dequeue()) # 输出: 移除的元素: a
    print("队列是否为空:", queue.is_empty()) # 输出: 队列是否为空: False
    print("队列大小:", queue.size()) # 输出: 队列大小: 2

    列表推导式

    列表推导式提供了从序列创建列表的简单途径。它的基本形式是在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句,返回结果是一个根据表达式从其后的 for 和 if 上下文环境中生成出来的列表。

    列表推导式示例
  • 将列表中每个数值乘三
  • vec = [2, 4, 6]
    print([3*x for x in vec]) # 输出: [6, 12, 18]

  • 生成包含元素及其平方的列表
  • vec = [2, 4, 6]
    print([[x, x**2] for x in vec]) # 输出: [[2, 4], [4, 16], [6, 36]]

  • 对序列里每一个元素调用 strip() 方法
  • freshfruit = [' banana', ' loganberry ', 'passion fruit ']
    print([weapon.strip() for weapon in freshfruit]) # 输出: ['banana', 'loganberry', 'passion fruit']

  • 使用 if 子句作为过滤器
  • vec = [2, 4, 6]
    print([3*x for x in vec if x > 3]) # 输出: [12, 18]
    print([3*x for x in vec if x < 2]) # 输出: []

  • 多重循环操作
  • vec1 = [2, 4, 6]
    vec2 = [4, 3, –9]
    print([x*y for x in vec1 for y in vec2]) # 输出: [8, 6, -18, 16, 12, -36, 24, 18, -54]
    print([x+y for x in vec1 for y in vec2]) # 输出: [6, 5, -7, 8, 7, -5, 10, 9, -3]
    print([vec1[i]*vec2[i] for i in range(len(vec1))]) # 输出: [8, 12, -54]

  • 使用复杂表达式或嵌套函数
  • print([str(round(355/113, i)) for i in range(1, 6)]) # 输出: ['3.1', '3.14', '3.142', '3.1416', '3.14159']

    嵌套列表解析

    Python 的列表可以嵌套,通过嵌套列表解析可以对嵌套列表进行处理。

    例如,将 3X4 的矩阵列表转换为 4X3 列表:

    matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    ]
    print([[row[i] for row in matrix] for i in range(4)]) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

    也可以使用以下方法实现:

    transposed = []
    for i in range(4):
    transposed.append([row[i] for row in matrix])
    print(transposed) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

    或者:

    transposed = []
    for i in range(4):
    transposed_row = []
    for row in matrix:
    transposed_row.append(row[i])
    transposed.append(transposed_row)
    print(transposed) # 输出: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

    del 语句

    使用 del 语句可以从一个列表中根据索引来删除一个元素、删除一个切割或清空整个列表,也可以删除实体变量。

    a = [–1, 1, 66.25, 333, 333, 1234.5]
    del a[0]
    print(a) # 输出: [1, 66.25, 333, 333, 1234.5]
    del a[2:4]
    print(a) # 输出: [1, 66.25, 1234.5]
    del a[:]
    print(a) # 输出: []
    del a # 删除变量 a

    二、元组和序列

    元组由若干逗号分隔的值组成,它是不可变的。

    t = 12345, 54321, 'hello!'
    print(t[0]) # 输出: 12345
    print(t) # 输出: (12345, 54321, 'hello!')

    # 元组可以嵌套
    u = t, (1, 2, 3, 4, 5)
    print(u) # 输出: ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

    元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号,不过括号通常是必须的(如果元组是更大的表达式的一部分)。

    三、集合

    集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素。

    可以用大括号({})创建集合。注意:如果要创建一个空集合,必须用 set() 而不是 {},后者创建一个空的字典。

    集合的基本操作

    basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
    print(basket) # 输出: {'orange', 'banana', 'pear', 'apple'}(删除重复元素)
    print('orange' in basket) # 输出: True(检测成员)
    print('crabgrass' in basket) # 输出: False

    a = set('abracadabra')
    b = set('alacazam')
    print(a) # 输出: {'a', 'r', 'b', 'c', 'd'}(a 中唯一的字母)
    print(a – b) # 输出: {'r', 'd', 'b'}(在 a 中的字母,但不在 b 中)
    print(a | b) # 输出: {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}(在 a 或 b 中的字母)
    print(a & b) # 输出: {'a', 'c'}(在 a 和 b 中都有的字母)
    print(a ^ b) # 输出: {'r', 'd', 'b', 'm', 'z', 'l'}(在 a 或 b 中的字母,但不同时在 a 和 b 中)

    集合推导式

    a = {x for x in 'abracadabra' if x not in 'abc'}
    print(a) # 输出: {'r', 'd'}

    四、字典(Dictionary)

    字典是 Python 中另一种非常重要的数据结构,它与序列不同,序列以连续的整数为索引,而字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。

    字典可以看作是无序的键值对集合,在同一个字典中,关键字必须互不相同。一对大括号{}可以创建一个空字典。

    字典的基本操作

    # 创建并初始化字典
    tel = {'jack': 4098, 'sape': 4139}
    # 新增键值对
    tel['guido'] = 4127
    print(tel) # 输出: {'sape': 4139, 'guido': 4127, 'jack': 4098}
    # 获取指定键的值
    print(tel['jack']) # 输出: 4098
    # 删除键值对
    del tel['sape']
    # 再次新增键值对
    tel['irv'] = 4127
    print(tel) # 输出: {'guido': 4127, 'irv': 4127, 'jack': 4098}
    # 获取所有键并转为列表
    print(list(tel.keys())) # 输出: ['irv', 'guido', 'jack']
    # 对键进行排序
    print(sorted(tel.keys())) # 输出: ['guido', 'irv', 'jack']
    # 检查键是否在字典中
    print('guido' in tel) # 输出: True
    print('jack' not in tel) # 输出: False

    字典的构造方式

  • 使用构造函数dict()从键值对元组列表构建字典
  • print(dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]))
    # 输出: {'sape': 4139, 'jack': 4098, 'guido': 4127}

  • 使用字典推导式创建字典
  • print({x: x**2 for x in (2, 4, 6)}) # 输出: {2: 4, 4: 16, 6: 36}

  • 当关键字是简单字符串时,使用关键字参数指定键值对更方便
  • print(dict(sape=4139, guido=4127, jack=4098))
    # 输出: {'sape': 4139, 'jack': 4098, 'guido': 4127}

    五、遍历技巧

    在处理各种数据结构时,掌握有效的遍历技巧能提高编程效率。

    遍历字典

    在字典中遍历时,可使用items()方法同时获取关键字和对应的值:

    knights = {'gallahad': 'the pure', 'robin': 'the brave'}
    for k, v in knights.items():
    print(k, v)
    # 输出:
    # gallahad the pure
    # robin the brave

    遍历序列

    在序列中遍历时,enumerate()函数可同时获取索引位置和对应值:

    for i, v in enumerate(['tic', 'tac', 'toe']):
    print(i, v)
    # 输出:
    # 0 tic
    # 1 tac
    # 2 toe

    同时遍历多个序列

    使用zip()函数可以组合多个序列,实现同时遍历:

    questions = ['name', 'quest', 'favorite color']
    answers = ['lancelot', 'the holy grail', 'blue']
    for q, a in zip(questions, answers):
    print('What is your {0}? It is {1}.'.format(q, a))
    # 输出:
    # What is your name? It is lancelot.
    # What is your quest? It is the holy grail.
    # What is your favorite color? It is blue.

    反向遍历序列

    调用reversed()函数可以反向遍历一个序列:

    for i in reversed(range(1, 10, 2)):
    print(i)
    # 输出:
    # 9
    # 7
    # 5
    # 3
    # 1

    按顺序遍历序列

    使用sorted()函数可返回一个已排序的序列,且不修改原序列,从而实现按顺序遍历:

    basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
    for f in sorted(set(basket)):
    print(f)
    # 输出:
    # apple
    # banana
    # orange
    # pear

    总结

    本文详细介绍了 Python3 中常用的数据结构,包括列表、元组、集合、字典等。列表作为可变序列,提供了丰富的方法,可用于实现栈和队列;元组是不可变序列,适合存储不可修改的数据;集合能有效处理元素去重和关系测试;字典则以键值对的形式存储数据,便于快速查找。

    同时,文中还介绍了各种数据结构的遍历技巧,掌握这些知识能帮助我们更灵活地处理数据,提高编程效率。希望本教程能为大家学习 Python 数据结构提供有力的帮助。

    💡下一篇咱们学习 Python3 模块全面学习教程!

    附录:扩展学习资源

  • 官方资源:
    • Python官网:https://www.python.org
    • PyPI:https://pypi.org(查找第三方库)
    • 安装包等相关文件(另附带pycharm工具),网盘下载地址:https://pan.quark.cn/s/649af731037c
    • 学习资料视频和文档资源,网盘下载地址: https://pan.quark.cn/s/ee16901a8954
  • 本专栏特色资源:
    • 代码资源仓库:CSDN专属资源在线获取
    • 海量Python教程:关注公众号:xcLeigh,获取网盘地址
    • 一对一答疑:添加微信与博主在线沟通(备注“Python专栏”)
  • 联系博主

        xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在CSDN、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


         💞 关注博主 🌀 带你实现畅游前后端!

         🏰 大屏可视化 🌀 带你体验酷炫大屏!

         💯 神秘个人简介 🌀 带你体验不一样得介绍!

         🥇 从零到一学习Python 🌀 带你玩转Python技术流!

         🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

         💦 注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://xcleigh.blog.csdn.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


    在这里插入图片描述

         📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

    赞(0)
    未经允许不得转载:171主机测评 » Python入门:Python3 数据结构全面学习教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址