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

news2024/11/26 12:12:23

在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]}  # 错误,因为列表是可变的

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

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

相关文章

Redis主从部署

主从部署 整体架构图 需要再建两个CentOs7,过程重复单机部署 查看自己ip地址命令 ifconfig 192.168.187.137 进入redis所在目录 cd /opt/software/redis cd redis-stable 进入配置文件 vim redis.conf 修改分身1、2的配置文件 搜索replicaof replicaof 192.168.187.137 63…

笔记 2 : 课本第 3 章开始,记录 arm 的汇编指令的格式

(13) 介绍 arm 中的第一个汇编指令的用法 mov : (14)立即数的概念: (15) 汇编中的移位写法: 举例 : (16) 学习一个新的指令 cmp &a…

二叉树相关理论知识

二叉树是计算机科学中一种基础且重要的数据结构,它属于树形结构的一个重要类型。以下是二叉树的理论基础,包括定义、基本形态、特殊类型、性质以及遍历方式等方面的内容。 一、定义 二叉树(Binary Tree)是n(n≥0&…

【实战系列】PostgreSQL 专栏,基于 PostgreSQL 16 版本

我的 PostgreSQL 专栏介绍及进度 20240715:目前整体进度已完成 85%,完成 16 万字,还有近 5 万字就截稿了。 (venv312) ➜ mypostgres git:(dev) sh scripts/word_statistics_pg_style.sh Filename …

15分钟快速了解图新地球能做什么,解决什么问题,快速入门

1.图新地球桌面端是什么 1.1官方定义 图新地球桌面端(LSV)是一款集多源数据加载、应用分析、演示汇报为一体的三维GIS 软件。采用了中科图新自主研发的国产三维地图引擎,支持各类无人机航测、CAD、BIM、规划成果等多源数据的加载融合;实现了BIMGIS 技术在实际业务…

所有权与生命周期:Rust 内存管理的哲学

所有权与生命周期:Rust内存管理的哲学 博主寄语引言:编程语言的内存管理困境与 Rust 的解决方案。所有权基本概念:资源的绝对主权生命周期的理解与应用:编译时的守护神借用与引用的精妙设计:安全与效率的和谐共舞Rust …

Golang | Leetcode Golang题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfTwo(n int) bool {const big 1 << 30return n > 0 && big%n 0 }

C# Opencv实现本地以图搜图

地址&#xff1a;冯腾飞/本地以图搜图

shell脚本变量和运算

一、shell变量及赋值 1.1、shell的变量 变量是用来临时保存数据的&#xff0c;并且该数据时可以变化的&#xff0c;任何一个语言都离不开变量&#xff0c;如果某个内容需要多次使用并且会重复出现&#xff0c;这样就可以使用变量了&#xff0c;如果需要修改直接修改变量就可以…

InterSystems IRIS使用python pyodbc连接 windows环境,odbc驱动安装,DSN配置,数据源配置

一、创建的数据库和数据 SELECT 1SELECT $ZVERSIONCREATE TABLE MyApp.Person ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHAR(1) );CREATE TABLE MyApp.Person2 ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHA…

USB 转多路串口应用软件说明

概述 PL731模块实现1个USB接口转7个异步串口(USART[1-7])功能。用于为计算机扩展异步串口&#xff0c;满足大多数一对多应用场景。支持Windows 10及以上系统&#xff0c;绝大多数Linux系统。嵌入式Linux系统有可能经过裁剪&#xff0c;需要系统开发人员确保系统安装正式的驱动…

[Unity]碰撞器的接触捕获层详解

目录 前言※关闭效果器(Effector)的遮罩接触捕获层的官方描述官方描述的翻译和注解接触捕获层作用简介接触(Contact)和捕获(Capture)配置接触捕获层的作用※接触捕获层对碰撞响应的影响需要接触捕获的物理查询需要接触捕获的物理回调注意运行时(Runtime)修改接触的相互性总结 相…

关于普通接口转AXI接口AMM Master Bridge仿真和使用

平台&#xff1a;vivado2023.1 应用场景&#xff0c;在设计的过程中&#xff0c;在xilinx内部的IP采用AXI接口协议。而我们外部的FIFO&#xff0c;BRAM等接口有时候使用的Native接口。使用AMM Master Bridge IP将普通的native接口转换为AXI接口协议。 参考文件&#xff1a;pg…

C++ | Leetcode C++题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> majorityElement(vector<int>& nums) {int n nums.size();vector<int> ans;unordered_map<int, int> cnt;for (auto & v : nums) {cnt[v];}for (auto & v : cnt…

leetcode 28.找出字符串中第一个匹配项的下标

对于Java来说直接秒呗&#xff1a; public static int strStr(String haystack, String needle) {return haystack.indexOf(needle); }

Unity UGUI Image Maskable

在Unity的UGUI系统中&#xff0c;Maskable属性用于控制UI元素是否受到父级遮罩组件的影响。以下是关于这个属性的详细说明和如何使用&#xff1a; Maskable属性 Maskable属性&#xff1a; 当你在GameObject上添加一个Image组件&#xff08;比如UI面板或按钮&#xff09;时&…

渲染100农场有哪些优势?渲染100邀请码1a12

渲染100是知名的渲染农场&#xff0c;深受广大设计师欢迎&#xff0c;比起其他农场&#xff0c;它有什么优势呢&#xff1f;我们一起来看看。 1、资源丰富 渲染100拥有强大的计算集群&#xff0c;能多线处理大规模、超复杂的场景渲染需要&#xff0c;性能卓越。2、成本低廉 渲…

【iOS】OC类与对象的本质分析

目录 前言clang常用命令对象本质探索属性的本质对象的内存大小isa 指针探究 前言 OC 代码的底层实现都是 C/C代码&#xff0c;OC 的对象都是基于 C/C 的数据结构实现的&#xff0c;实际 OC 对象的本质就是结构体&#xff0c;那到底是一个怎样的结构体呢&#xff1f; clang常用…

glibc-all-in-one+patchelf修改程序libc

主要是做堆的时候经常遇到libc小版本不对导致libcbase不对打不通的情况&#xff0c;再者&#xff0c;每个题换一个ubuntu虚拟机属实麻烦&#xff0c;所以还是回到最初也是最好用的做法&#xff1a;patch libc。 核心就是两个工具&#xff1a;glibc-all-in-one和patchlef。但是…

buuctf-web

查看后端源码 得到base64编码&#xff0c;解码得flag