白骑士的Python教学基础篇 1.5 数据结构

系列目录​​​​​​​

上一篇:白骑士的Python教学基础篇 1.4 函数与模块

        数据结构是编程语言中用于存储和组织数据的基本构件。在Python中,常见的数据结构包括列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。每种数据结构都有其独特的特性和用途。理解这些数据结构及其用法,对于编写高效且易于维护的Python代码至关重要。

列表(List)

        列表是Python中最常用的数据结构之一。它是一个有序的集合,可以包含任意类型的元素,包括数字、字符串、其他列表等。列表是可变的,这意味着我们可以修改列表中的元素。

创建列表

# 创建一个空列表
empty_list = []# 创建一个包含元素的列表
fruits = ["apple", "banana", "cherry"]

访问列表元素

# 通过索引访问元素
print(fruits[0])  # 输出: apple# 通过负索引访问元素
print(fruits[-1])  # 输出: cherry

修改列表元素

# 修改列表中的元素
fruits[1] = "blueberry"
print(fruits)  # 输出: ['apple', 'blueberry', 'cherry']

添加和删除元素

# 使用append()方法添加元素
fruits.append("date")
print(fruits)  # 输出: ['apple', 'blueberry', 'cherry', 'date']# 使用remove()方法删除元素
fruits.remove("blueberry")
print(fruits)  # 输出: ['apple', 'cherry', 'date']# 使用pop()方法删除并返回最后一个元素
last_fruit = fruits.pop()
print(last_fruit)  # 输出: date
print(fruits)  # 输出: ['apple', 'cherry']

列表切片

# 列表切片可以返回一个新的列表
print(fruits[0:2])  # 输出: ['apple', 'cherry']

列表推导式

# 使用列表推导式创建列表
squares = [x**2 for x in range(10)]
print(squares)  # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

元组(Tuple)

        元组与列表类似,但元组是不可变的。这意味着一旦创建,元组中的元素就不能修改。这使得元组适用于那些不希望被修改的数据集合。

创建元组

# 创建一个空元组
empty_tuple = ()# 创建一个包含元素的元组
numbers = (1, 2, 3)

访问元组元素

# 通过索引访问元素
print(numbers[1])  # 输出: 2# 通过负索引访问元素
print(numbers[-1])  # 输出: 3

不可变特性

# 尝试修改元组中的元素会引发错误
# numbers[1] = 4  # 这行代码会引发TypeError

元组解包

# 元组解包
a, b, c = numbers
print(a, b, c)  # 输出: 1 2 3

单元素元组

# 创建一个包含单个元素的元组时需要在元素后加一个逗号
single_element_tuple = (4,)
print(single_element_tuple)  # 输出: (4,)

字典(Dictionary)

        字典是Python中另一种重要的数据结构。它是一个无序的键值对集合,每个键必须是唯一的,可以是任意不可变数据类型,而值可以是任意数据类型。

创建字典

# 创建一个空字典
empty_dict = {}# 创建一个包含键值对的字典
person = {"name": "Alice", "age": 25, "city": "New York"}

访问字典元素

# 通过键访问值
print(person["name"])  # 输出: Alice# 使用get()方法访问值,如果键不存在则返回None
print(person.get("name"))  # 输出: Alice
print(person.get("address"))  # 输出: None

修改字典元素

# 修改字典中的值
person["age"] = 26
print(person)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}# 添加新键值对
person["email"] = "alice@example.com"
print(person)  # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York', 'email': 'alice@example.com'}

删除字典元素

# 使用del关键字删除键值对
del person["city"]
print(person)  # 输出: {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}# 使用pop()方法删除并返回指定键的值
email = person.pop("email")
print(email)  # 输出: alice@example.com
print(person)  # 输出: {'name': 'Alice', 'age': 26}

遍历字典

# 遍历字典的键值对
for key, value in person.items():print(f"{key}: {value}")# 输出:
# name: Alice
# age: 26

集合(Set)

        集合是一个无序的不重复元素集合。集合主要用于成员关系测试和删除重复元素。集合支持数学上的集合操作,如并集、交集、差集等。

创建集合

# 创建一个空集合
empty_set = set()# 创建一个包含元素的集合
fruits_set = {"apple", "banana", "cherry"}

访问集合元素

# 不能通过索引访问集合中的元素,但可以通过迭代访问
for fruit in fruits_set:print(fruit)# 输出的顺序是无序的

添加和删除元素

# 添加元素
fruits_set.add("date")
print(fruits_set)  # 输出: {'date', 'apple', 'cherry', 'banana'}# 删除元素
fruits_set.remove("banana")
print(fruits_set)  # 输出: {'date', 'apple', 'cherry'}# 使用discard()方法删除元素,如果元素不存在也不会引发错误
fruits_set.discard("banana")

集合操作

# 创建两个集合
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}# 并集
union_set = set_a | set_b
print(union_set)  # 输出: {1, 2, 3, 4, 5, 6}# 交集
intersection_set = set_a & set_b
print(intersection_set)  # 输出: {3, 4}# 差集
difference_set = set_a - set_b
print(difference_set)  # 输出: {1, 2}# 对称差集
symmetric_difference_set = set_a ^ set_b
print(symmetric_difference_set)  # 输出: {1, 2, 5, 6}

集合推导式

# 使用集合推导式创建集合
squares_set = {x**2 for x in range(10)}
print(squares_set)  # 输出: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

总结

        Python提供了丰富的数据结构来处理不同类型的数据。列表(List)适用于有序且可变的集合;元组(Tuple)用于不可变的数据集合;字典(Dictionary)提供了键值对的映射;集合(Set)则用于处理无序且不重复的元素集合。通过理解和使用这些数据结构,可以编写出更高效、清晰且易维护的Python代码。无论是进行简单的数据存储,还是复杂的数据处理操作,这些数据结构都是不可或缺的工具。

下一篇:白骑士的Python教学进阶篇 2.1 面向对象编程(OOP)​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 “androidx.databinding.DataBindingUtil“ 细节和使用

介绍 数据绑定(Data Binding)是 Android 中的一个强大功能,它允许你使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用中的数据源。androidx.databinding.DataBindingUtil 类是一个工具类,它提供了用于处理数据绑定的方…

容器技术-docker5

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置…

【面试干货】Static关键字的用法详解

【面试干货】Static关键字的用法详解 1、Static修饰内部类2、Static修饰方法3、Static修饰变量4、Static修饰代码块5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java编程语言中,static是一个关键字,它可…

MT19937 64bit 机器上的实现及原理解析

1, mt19937 实现源码 mt19937-64bit_ex.cpp /*References:T. Nishimura, Tables of 64-bit Mersenne TwistersACM Transactions on Modeling and Computer Simulation 10. (2000) 348--357.M. Matsumoto and T. Nishimura,Mersenne Twister: a 623-dimensionally e…

electron vite react 创建一个项目

要使用 Electron、Vite 和 React 创建一个项目,你可以按照以下步骤操作: 1. 安装 Node.js 和 npm 首先,确保你的计算机上安装了 Node.js 和 npm(Node Package Manager)。你可以从 Node.js 官网 下载并安装。 2. 初始化一个新的项目 在你的工作目录下,创建一个新的文件…

水果商城外卖微信小程序模板

手机微信水果外卖,水果电商,水果商城网页小程序模板。包含:主页、列表页、详情页、购物车、个人中心。 水果商城外卖小程序模板

[C++][设计模式][迭代器模式]详细讲解

目录 1.动机2.模式定义3.要点总结4.代码感受 1.动机 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素; 同时这种”透明遍历“也…

实现Java中的线程安全集合类

实现Java中的线程安全集合类 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 一、介绍 在多线程编程中,保证数据的线程安全性是至关重要的。Java提…

可燃气体报警器检测机构:严格遵守的安全标准

随着工业、商业和家庭领域对安全要求的不断提高,可燃气体报警器作为预防火灾和爆炸事故的重要设备,其性能稳定性和可靠性越来越受到关注。 可燃气体报警器检测机构应运而生,为确保这些设备的有效运行发挥着不可替代的作用。 接下来&#xf…

超强风冷制动电阻器-大功率对流冷却电阻器

风冷制动电阻 EAK 的风冷制动电阻器的制造功率范围为 5 kW 至 1200 kW。这些电阻器用于从螺旋桨、起重机、绞盘、顶部驱动器等倾倒多余的电力。 风冷电阻器是独立的单元,不需要进一步安装。该装置由内置风扇冷却。它也可以在没有风扇的情况下制作(非强…

qt-webassembly 实现服务器上的文件下载到本地(浏览器)

1. c 实现 qt 代码 #include <QtCore> #include <QtNetwork> #include <QGuiApplication> #include <emscripten.h> #include <emscripten/html5.h> #include <emscripten/val.h> #include <emscripten/bind.h>using namespace emsc…

HTMLCSS(入门)

HTML <html> <head><title>第一个页面</title></head><body>键盘敲烂&#xff0c;工资过万</body> </html> <!DOCTYPE>文档类型声明&#xff0c;告诉浏览器使用哪种HTML版本显示网页 <!DOCTYPE html>当前页面采取…

php如何实现秒杀活动功能

随着电商、移动支付等行业的发展&#xff0c;商品的秒杀活动越来越受到消费者们的欢迎。而后台技术支持的php作为非常流行&#xff0c;广泛应用的开发语言&#xff0c;也被越来越多的企业采用用来实现秒杀活动。 那么&#xff0c;在PHP中&#xff0c;如何实现秒杀活动呢&#…

Android C++系列:JNI常见问题

1. 背景 本文整理了JNI开发中常见的问题和解决方案。 2. 编译时指定SDK版本问题 智能语音交互SDK工程模块编译时指定的ANDROID_PLATFORM统一是23:-DANDROID_PLATFORM=23,ndk使用的是版本是17,在手上现有设备跑的都没问题,但是在一个新采购的temi移动机器人上跑不起来,定…

(2024)docker-compose实战 (6)部署前端项目(react, vue)

前言 本次仅使用nginx搭建单一的前端项目, 前端项目可以是html, react, vue.项目目录中需要携带nginx的配置文件(conf/default.conf).前端文件直接拷贝到项目目录中即可.如果不确定镜像的配置文件目录, 可以通过 docker inspect 镜像名 来查看具体的配置信息.使用docker-compos…

D - Intersecting Intervals(abc355)

题意&#xff1a;有n个区间&#xff0c;找出俩俩区间相交的个数 分析&#xff1a; 设初始俩俩相交&#xff0c;找出不相交的&#xff08;不同区间l>r)&#xff0c;减去即可 #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ ios:…

【前端CSS3】一篇搞懂各类常用选择器(黑马程序员)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;2.1 基础选择器2.1.1 标签选择器2.1.2 类选择器2.1.3 id选择器2.1.4 通配符选择题2.1.5 类选择器与id选择器区别☀️☀️☀️2.1.6 基础选择器总结&#x1f680; 2.2 复合类选择器2.2.1 后代选择…

Linux系统编程:信号

目录 1.信号概念 2.信号产生 2.1 终端 2.2 系统调用 2.3 硬件异常 2.4 软件条件 2.5 小结 3. 进程退出时的核心转储问题 4. 信号捕捉初识 5. 阻塞信号 5.1 相关概念 5.2 在内核中的表示 6. 信号捕捉 6.1 知识铺垫 6.2 信号捕捉流程 6.3 sigset_t 6.4 信号集操…

CTFHUB-SSRF-上传文件

通过file协议访问flag.php文件内容 ?urlfile:///var/www/html/flag.php 右键查看页面源代码&#xff0c;发现需要从内部上传一个文件这样才能正常获取到flag ?urlhttp://127.0.0.1/flag.php 发现无提交按钮&#xff0c;构造一个 <input type"submit" name&qu…

RabbitMQ 之 延迟队列

目录 ​编辑一、延迟队列概念 二、延迟队列使用场景 三、整合 SpringBoot 1、创建项目 2、添加依赖 3、修改配置文件 4、添加 Swagger 配置类 四、队列 TTL 1、代码架构图 2、配置文件代码类 3、生产者 4、消费者 5、结果展示 五、延时队列优化 1、代码架构图 …