Python中的数据结构:五彩斑斓的糖果盒

在Python编程的世界里,数据结构就像是一个个五彩斑斓的糖果盒,每一种糖果都有其独特的味道和形状。这些多姿多彩,形状和味道各异的糖果盒子包括了:List(列表)、Tuple(元组)、Dictionary(字典)和Set(集合)。只有充分了解每种糖果的特性及何时品尝最佳,才是制作美味佳肴的关键。现在,就让我们一起打开这个充满奇幻的数据结构糖果盒,开始一场探索这些有趣糖果盒的奇妙之旅吧!

首先,让我们的脚步停留在糖果盒中的第一种特殊糖果——List。List这个小家伙就像是一个魔法糖果袋,它的大小可以随时变化,仿佛拥有了伸缩自如的超能力。你可以随意往里面添加、删除或者修改糖果,就像是一个充满惊喜的宝盒。比如,你有一个糖果清单,买了新的糖果就放进去,不再喜欢的糖果就拿出来,简直方便得不要不要的!在Python的世界里,我们这样创建一个List糖果盒:mylist = [1, 2, 3]。看,是不是简单又有趣?

接下来,我们来到了Tuple糖果盒前。Tuple和List有些相似,但它是一个守规矩的家伙。一旦创建了Tuple,就不能修改它的大小或内容,就像是一个密封的盒子。这种特性让Tuple成为了一个很好的数据存储选择,特别是当你需要确保数据不会被意外修改的时候。创建一个Tuple也很简单:mytuple = (1, 2, 3)。

现在,让我们走进Dictionary糖果盒的领地。Dictionary是一个喜欢配对的家伙,它由键(key)和值(value)组成。每个糖果都有一个独特的名字(键),而这个名字对应的就是糖果本身(值)。就像在电话簿中查找某个人的名字一样,我们可以快速找到Dictionary中的某个键对应的值。在Python中,我们这样创建一个Dictionary:mydict = {'Alice': 123, 'Bob': 456}。有了Dictionary,我们可以快速查找到某个键对应的值,非常方便。

最终,我们抵达了Set糖果的奇幻屋。Set糖果与众不同,每一颗都独一无二,宛如一个收藏家的梦寐以求的藏品陈列。当你希望从一大堆糖果中挑出那些独一无二的口味时,Set糖果就是你的完美助手。在Python的世界里,创建一盒Set糖果非常简单:myset = {1, 2, 3}。

在我们的故事中,List糖果盒、Tuple糖果盒、Dictionary糖果盒和Set糖果盒都是Python世界里的超级英雄,它们各自拥有独特的超能力,帮助我们解决各种编程难题。现在,你已经认识了这四种糖果盒,不妨去Python的世界里,和它们一起展开一场精彩的冒险吧!

最后给大家详细梳理一下Python中的数据结构(非常重要,建议收藏哦):


一、List(列表)

Python中的列表(List)是一种有序的集合,可以随时添加和删除其中的元素。以下是一些常用的列表操作:

1. 创建列表:使用方括号`[]`创建一个空列表,或者在方括号内添加元素来创建一个包含元素的列表。

empty_list = []
fruits = ['apple', 'banana', 'cherry']

2. 访问列表元素:通过索引访问列表中的元素,索引从0开始。

first_fruit = fruits[0]  # 'apple'
second_fruit = fruits[1]  # 'banana'

3. 修改列表元素:通过索引赋值来修改列表中的元素。

fruits[0] = 'orange'  # 将第一个元素改为'orange'

4. 添加元素:使用`append()`方法在列表末尾添加元素,或者使用`insert()`方法在指定位置插入元素。

fruits.append('grape')  # 在列表末尾添加'grape'
fruits.insert(1, 'kiwi')  # 在索引1处插入'kiwi'

5. 删除元素:使用`del`关键字删除指定索引的元素,或者使用`remove()`方法删除指定的元素。

del fruits[0]  # 删除第一个元素
fruits.remove('banana')  # 删除'banana'

6. 列表切片:使用切片操作符`:`获取列表的一部分。

sub_list = fruits[1:3]  # 获取索引1到2的元素,不包括索引3的元素

7. 列表长度:使用`len()`函数获取列表的长度。

length = len(fruits)  # 获取列表的长度

8. 列表排序:使用`sort()`方法对列表进行排序,或者使用`sorted()`函数返回一个新的排序后的列表。

fruits.sort()  # 对原列表进行排序
sorted_fruits = sorted(fruits)  # 返回一个新的排序后的列表

9. 列表遍历:使用`for`循环遍历列表中的元素。

for fruit in fruits:
    print(fruit)

10. 列表推导式:使用简洁的语法快速生成列表。

squares = [x**2 for x in range(1, 6)]  # 生成一个包含1到5的平方数的列表

二、Tuple(元组)

Python中的元组(Tuple)是一种不可变的序列类型,用于存储一组有序的数据。元组的元素可以是任意类型,包括数字、字符串、列表等。元组的创建很简单,只需将元素放在圆括号内即可。例如:

my_tuple = (1, 2, 3)

元组的主要特点如下:

1. 不可变性:元组一旦创建,其内容就不能被修改。这意味着我们不能添加、删除或更改元组中的元素。

2. 有序性:元组中的元素是有序的,可以通过索引访问。

3. 可重复性:元组可以包含重复的元素。

4. 支持嵌套:元组可以包含其他元组作为其元素。

5. 支持解包:可以将元组的元素分配给多个变量。

以下是一些常用的元组操作:

1. 访问元素:通过索引访问元组中的元素。

my_tuple = (1, 2, 3)
print(my_tuple[0])  # 输出:1

2. 切片:使用切片操作符获取元组的一部分。

my_tuple = (1, 2, 3, 4, 5)
print(my_tuple[1:4])  # 输出:(2, 3, 4)

3. 遍历元素:使用for循环遍历元组中的所有元素。

my_tuple = (1, 2, 3)
for item in my_tuple:
    print(item)

4. 解包:将元组的元素分配给多个变量。

my_tuple = (1, 2, 3)
a, b, c = my_tuple
print(a, b, c)  # 输出:1 2 3

5. 计算长度:使用len()函数获取元组的长度。

my_tuple = (1, 2, 3)
print(len(my_tuple))  # 输出:3

6. 连接元组:使用+运算符连接两个元组。

tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2
print(combined_tuple)  # 输出:(1, 2, 3, 4, 5, 6)

7. 检查元素是否存在:使用in关键字检查元素是否在元组中。

my_tuple = (1, 2, 3)
print(3 in my_tuple)  # 输出:True

三、Dictionary(字典)

Python中的字典(Dictionary)是一种可变的、无序的、键值对集合。字典中的键必须是唯一的,而值可以是任意类型的数据(数字、字符串、列表、另一个字典等)。

以下是一些常见的字典操作:

1. 创建字典:使用大括号 `{}` 或 `dict()` 函数创建一个空字典,或者使用键值对初始化字典。

# 使用大括号创建字典
my_dict = {'key1': 'value1', 'key2': 'value2'}
# 使用dict()函数创建字典
my_dict = dict(key1='value1', key2='value2')

2. 访问字典中的值:通过键来访问字典中的值。

value = my_dict['key1']

3. 修改字典:可以通过键来更新字典中的值。

my_dict['key1'] = 'new_value1'

4. 添加键值对:直接通过新的键来添加键值对。

my_dict['key3'] = 'value3'

5. 删除键值对:使用 `del` 关键字删除指定的键值对。

del my_dict['key1']

6. 检查键是否存在:使用 `in` 关键字检查字典中是否存在某个键。

if 'key1' in my_dict:
    print("Key exists")
else:
    print("Key does not exist")

7. 获取所有键和值:使用 `keys()` 和 `values()` 方法分别获取字典中的所有键和值。

keys = my_dict.keys()
values = my_dict.values()

8. 遍历字典:可以使用 `items()` 方法遍历字典中的键值对。

for key, value in my_dict.items():
    print(f"{key}: {value}")

总结:Python字典是一种非常有用的数据结构,可以用来存储和检索键值对。它提供了许多内置方法来操作字典,如添加、删除、查找和遍历元素。

四、Set(集合)

Python中的集合(Set)是一个无序的、不重复的元素序列。它的主要用途包括成员检测和消除重复元素。集合对象还支持数学运算,如并集、交集、差集和对称差分。

以下是一些常用的集合操作及其代码示例:

1. 创建集合:使用`set()`函数或大括号`{}`创建一个空集合,或者将一个列表或其他可迭代对象转换为集合。

empty_set = set()
numbers = [1, 2, 3, 4, 5]
number_set = set(numbers)

2. 添加元素:使用`add()`方法向集合中添加单个元素。

my_set = {1, 2, 3}
my_set.add(4)

3. 删除元素:使用`remove()`方法删除集合中的指定元素,如果元素不存在则抛出KeyError异常。使用`discard()`方法删除元素,如果元素不存在则不抛出异常。

my_set = {1, 2, 3}
my_set.remove(2)
my_set.discard(3)

4. 集合运算:可以使用集合的方法进行数学运算,如并集、交集、差集和对称差分。

A = {1, 2, 3}
B = {3, 4, 5}
# 并集
union_set = A.union(B)
# 交集
intersection_set = A.intersection(B)
# 差集
difference_set = A.difference(B)
# 对称差分
symmetric_difference_set = A.symmetric_difference(B)

5. 检查子集和超集:使用`issubset()`和`issuperset()`方法检查一个集合是否是另一个集合的子集或超集。

A = {1, 2, 3}
B = {1, 2}
C = {1, 2, 3, 4}
print(B.issubset(A))  # True
print(A.issuperset(B))  # True
print(A.issubset(C))  # False

6. 清空集合:使用`clear()`方法清空集合中的所有元素。

my_set = {1, 2, 3}
my_set.clear()

7. 不可变性:集合本身是不可变的,但可以包含可变类型的元素,如列表。然而,一旦创建了集合,就不能更改其内容。

my_set = {[1, 2], [3, 4]}  # 错误,因为列表是可变的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java开发实训】day05——数组常见算法

目录 一、数组翻转 1.1示例代码 1.2适用场景 二、冒泡排序 2.1示例代码 2.2适用场景 三、二分查找 3.1示例代码 3.2适用场景 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo…

【软件建模与设计】-04-软件设计和体系结构概念

目录 1、类与对象 2、信息隐藏 2.1、示例 3、继承和泛化/特化 4、并发处理 4.1、并发对象间的协作 5、设计模式 6、软件体系结构和构件 7、软件质量属性 1、类与对象 一个对象是现实世界中物理的或概念的实体。 一个对象盖了数据(data)以及作用于数据之上的过程(pro…

Sentinel规则持久化Push模式两种实现方式

文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…

liunx面试题目

如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 查看物理cup: cat /proc/cpuinfo|grep -c ‘physical id’ 查看每颗cup核数 cat /proc/cpuinfo|grep -c ‘processor’ 若希望自动实现软件包的更新,可以使用yum-cron并启动该服务 yum -y …

解决一下git clone失败的问题

1).不开梯子,我们用https克隆 git clone https://github.com 报错: Failed to connect to github.com port 443 after 2091 ms: Couldnt connect to server 解决办法: 开梯子,然后# 注意修改成自己的IP和端口号 gi…

[HDCTF2019]MFC

[HDCTF2019]MFC-CSDN博客 不会写 完全画瓢 我还以为win32什么系统逆向 原来是小瘪三! VM保护 下载xspy(看雪上有) 打开32位的 再打开 这个窗口 把这个放大镜托到这个大窗口(里面有个小窗口,不要托错了) 下面这个 onmeg 就她不正常,是什么0464 #include <stdio.h&g…

简易ELK搭建

ELK搭建 1. elasticsearch1.1 下载1.2 ES配置1.3 启动ES1.4 开启权限认证1.5 IK分词器配置&#xff08;非必须&#xff09; 2. kibana2.1 下载2.2 配置2.3 启动kibana 3. logstash3.1 下载3.2 配置3.3 启动logstash 4. springboot推送数据 ELK包括elasticsearch、logstash、kib…

自然语言处理(NLP)——法国工程师IMT联盟 期末考试题

1. 问题1 &#xff08;法语&#xff09;En langue arabe lcrasante majorit des mots sont forms par des combinaisons de racines et de schmes. Dans ce mcanisme... &#xff08;英语&#xff09;In Arabic language the vast majority&#xff08;十之八九&#xff09; of…

《昇思25天学习打卡营第23天|onereal》

第23天学习内容简介&#xff1a; ----------------------------------------------------------------------------- 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 1 环境配置 配置网络线路 2 代码开发 下载权重大约需要10分钟 ------------------------------- 运…

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

基于Java的在线考试系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java MySQL B/S架构 SpringBoot框架 工具&#xff1a;Eclipse、MySQL环境配置工具 系统展示 首…

ArkUI状态管理

State装饰器 在声明式UI中&#xff0c;是以状态驱动试图更新 状态 (State) 指驱动视图更新的数据(被装饰器标记的变量) 试图(View) 基于UI描述渲染得到用户界面 说明 1.State装饰器标记的变量必须初始化&#xff0c;不能为空 2.State支持Object、classstring、number、b…

【LeetCode:试题 16.06. 最小差 + 双指针 + 防止整型溢出】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Pythonselenium自动化测试实战项目详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 说明&#xff1a;本项目采用流程控制思想&#xff0c;未引用unittest&pytest等单元测试框架 …

SSE(Server Sent Event)实战(3)- Spring Web Flux 实现

上篇博客 SSE&#xff08;Server Sent Event&#xff09;实战&#xff08;2&#xff09;- Spring MVC 实现&#xff0c;我们用 Spring MVC 实现了简单的消息推送&#xff0c;并且留下了两个问题&#xff0c;这篇博客&#xff0c;我们用 Spring Web Flux 实现&#xff0c;并且看…

Unity动画系统(3)---融合树

6.1 动画系统基础2-6_哔哩哔哩_bilibili Animator类 using System.Collections; using System.Collections.Generic; using UnityEngine; public class EthanController : MonoBehaviour { private Animator ani; private void Awake() { ani GetComponen…

【ECharts】使用 ECharts 处理不同时间节点的数据系列展示

使用 ECharts 处理不同时间节点的数据系列展示 在数据可视化中&#xff0c;我们经常遇到这样的问题&#xff1a;不同数据系列的数据点在时间轴上并不对齐。这种情况下&#xff0c;如果直接在 ECharts 中展示&#xff0c;图表可能会出现混乱或不准确。本文将通过一个示例代码&a…

解决VSCode自动识别文件编码

在VScode 的 设置界面 输入 autoGuess 关键字 &#xff0c;勾选启用即可自动识别&#xff01;&#xff01;&#xff01;

【Python与GUI开发】事件处理与打包分发

文章目录 前言 一、高级事件处理 1.自定义事件 2.拖放操作 3.复杂控件的事件处理 二、打包和分发 Tkinter 应用 1.PyInstaller 2.cx_Freeze 3.spec 文件 4.分发注意事项 三、实战示例&#xff1a;文件浏览器 总结 前言 在前面的讨论中&#xff0c;我们深入理解了 T…

Qt MV架构-委托类

一、基本概念 与MVC模式不同&#xff0c;MV视图架构中没有包含一个完全分离的组件来处理与用户的交互。 一般地&#xff0c;视图用来将模型中的数据显示给用户&#xff0c;也用来处理用户的输入。为了获得更高的灵活性&#xff0c;交互可以由委托来执行。 这些组件提供了输入…