Python高级编程

news/2024/5/18 18:59:47

描述

  • 集合,列表生成式,生成器,迭代器,切片

Python 中的集合类型是一种无序、不重复的数据容器,用于存储可哈希(hashable)的元素。Python 提供了两种内置的集合类型:set 和 frozenset。下面我将详细描述这两种类型,并举例说明它们的用法。

Set(集合)

集合(set)是一种可变的、无序的、不重复的数据集合。它基于哈希表实现,因此具有高效的查找和插入操作。集合中的元素必须是可哈希的,因此可以包含数字、字符串、元组等不可变类型的元素,但不能包含列表、字典等可变类型的元素。

创建集合

可以使用花括号 {}set() 函数来创建集合。

# 使用花括号创建集合
my_set = {1, 2, 3, 4, 5}# 使用 set() 函数创建集合
another_set = set([4, 5, 6, 7, 8])
添加和删除元素

可以使用 add() 方法向集合中添加元素,使用 remove()discard() 方法删除元素。

my_set.add(6)
print(my_set)  # Output: {1, 2, 3, 4, 5, 6}my_set.remove(3)
print(my_set)  # Output: {1, 2, 4, 5, 6}my_set.discard(2)
print(my_set)  # Output: {1, 4, 5, 6}
集合运算

集合支持多种数学运算,如并集、交集、差集和对称差等。

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}#并集
union_set = set1 | set2  # 或者使用 set1.union(set2)
print(union_set)  # Output: {1, 2, 3, 4, 5, 6, 7, 8}#交集
intersection_set = set1 & set2  # 或者使用 set1.intersection(set2)
print(intersection_set)  # Output: {4, 5}#差集
difference_set = set1 - set2  # 或者使用 set1.difference(set2)
print(difference_set)  # Output: {1, 2, 3}#对称差
symmetric_difference_set = set1 ^ set2  # 或者使用 set1.symmetric_difference(set2)
print(symmetric_difference_set)  # Output: {1, 2, 3, 6, 7, 8}

Frozenset(冻结集合)

冻结集合(frozenset)是一种不可变的集合类型,一旦创建就不能修改。具有与集合相同的性质,但不支持添加、删除或修改元素的操作。

创建冻结集合

可以使用 frozenset() 函数来创建冻结集合。

frozen_set = frozenset([1, 2, 3, 4, 5])
不可变性

冻结集合是不可变的,因此不能对其进行修改操作。

# 尝试添加元素到冻结集合中将会引发 TypeError
frozen_set.add(6)  # TypeError: 'frozenset' object has no attribute 'add'
适用场景

冻结集合通常用于需要不可变性的场景,例如作为字典的键或其他集合的元素。

# 使用冻结集合作为字典的键
dict_with_frozenset = {frozen_set: 'value'}# 使用冻结集合作为集合的元素
set_with_frozenset = {frozen_set}

示例

现在,让我们通过一个示例来展示集合和冻结集合的使用。

# 创建两个集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}#计算并集
union_set = set1 | set2
print("Union set:", union_set)#创建一个冻结集合
frozen_set = frozenset([4, 5, 6, 9, 10])#使用冻结集合作为字典的键
my_dict = {frozen_set: "Frozen Set Example"}print("Dictionary with frozen set as key:", my_dict)

这个示例展示了集合的并集操作以及如何使用冻结集合作为字典的键。

列表生成式(List Comprehension)

列表生成式是一种简洁的语法,用于快速创建列表。允许我们在一行代码中根据某种规则生成一个新的列表。

示例:

#生成一个包含1到10的平方的列表
squared_numbers = [x**2 for x in range(1, 11)]
print(squared_numbers)

生成器(Generator)

生成器是一种特殊的迭代器,可以按需生成数据,而不需要一次性将所有数据存储在内存中。生成器使用yield关键字来产生值,并可以暂停和恢复状态。

示例:

# 生成一个简单的生成器,返回1到5的数
def simple_generator():for i in range(1, 6):yield igen = simple_generator()
for value in gen:print(value)

迭代器(Iterator)

迭代器是一个带有__iter__()__next__()方法的对象,用于遍历集合中的元素,例如列表、元组和字典。迭代器可以通过iter()函数来创建,然后使用next()方法逐个获取元素。

示例:

# 创建一个迭代器对象
my_list = [1, 2, 3]
my_iter = iter(my_list)# 使用 next() 方法依次获取元素
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))

切片(Slicing)

切片是用于从序列中获取子序列的一种功能。可用于列表、元组、字符串等序列类型。通过指定起始索引、终止索引和步长,可以灵活地获取需要的元素。

示例:

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]# 获取索引1到5(不包括5)的元素
slice_result = my_list[1:5]
print(slice_result)# 使用步长2获取偶数索引位置的元素
slice_even = my_list[::2]
print(slice_even)

http://www.mrgr.cn/p/60015653

相关文章

ThreeJS:坐标辅助器与轨道控制器

ThreeJS与右手坐标系 使用ThreeJS创建3D场景时,需要使用一个坐标系来定位和控制对象的位置和方向。 ThreeJS使用的坐标系是右手坐标系,即:X轴向右、Y轴向上、Z轴向前,如下图所示, ThreeJS-右手坐标系 Tips:…

code-server容器webpack的ws无法连接解决方法

TLDR 通过指定client的wsrul去连接ws devServer.client.webSocketURL ‘wss://<Forwarded uri>/ws’ 拓扑 1、code-server: 用于编写代码、启动webpack dev-server 服务&#xff1b;[https://<domain>:8001] 2、webpack: 用于浏览dev-server服务&#xff1b;[ht…

Picks Theorem 学习笔记

求顶点都是整点的简单多边形内部的整点个数。Picks Theorem 学习笔记 UVA10088 题目传送门 题意:顺时针或逆时针地给出一个 \(n\) 个顶点(顶点都是整点)的简单多边形,求这个多边形内部的整点数量(位于多边形形上的整点不算)。 Picks Theorem 对于一个顶点都是整点的简单多…

DC-9-sudo提权

标签:SQL注入、本地文件包含LFI、端口敲门、hydra爆破、linux提权 0x00 环境准备 下载地址:https://www.vulnhub.com/entry/dc-9,412/ 靶机描述: DC-9 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testi…

DC-8-Drupal-exim4提权

Vulnhub简介 Vulnhub是一个提供了很多漏洞环境的靶场平台,其中的环境基本上都是做好的虚拟机镜像文件,需要使用VMware或者是VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚拟机到获取操作系统的root权限和查看flag。 靶场部署 Vulnhub官网:https://www…

C#调用skiasharp实现绘制并拖拽图形

SkiaSharp是基于.net的跨平台二维图形库&#xff0c;封装的谷歌的Skia库&#xff0c;SkiaSharp支持在以下平台或运行时中使用&#xff0c;能够在图片中绘图&#xff0c;也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法&#xff0c;并参照参考文献5实现绘…

DC-5-screen提权

Vulnhub简介 Vulnhub是一个提供了很多漏洞环境的靶场平台,其中的环境基本上都是做好的虚拟机镜像文件,需要使用VMware或者是VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚拟机到获取操作系统的root权限和查看flag。 靶场部署 vulnhub官网:https://www…

Kubernetes 弃用Docker后 Kubelet切换到Containerd

containerd 是一个高级容器运行时&#xff0c;又名 容器管理器。简单来说&#xff0c;它是一个守护进程&#xff0c;在单个主机上管理完整的容器生命周期&#xff1a;创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。 containerd 旨在轻松嵌入到更大的系统中。Docke…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答&#xff1a;MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

洛谷P2375 [NOI2014] 动物园

动物园 题目描述输入格式输出格式输入输出样例 输入 3 aaaaa ab abcababc 输出 36 1 32 开始时都没看出来这是kmp板子题 先看看AC代码吧 #include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e6+10; const int mod=1e9+7; char a[maxn];…

List的remove()方法详解

https://blog.csdn.net/anxin_hw/article/details/128312846 一、错误使用场景 1、普通for循环遍历List删除指定元素,list.remove(index) 示例:将姓张的名字移除掉List<String> nameList = new ArrayList<>(Arrays.asList("张三", "李四", &…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速在本地运行大模型。通过简单的安装指令&#xff0c;用户可以执行一条命令就在本地运行开源大型语言模型&#xff0c;如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

软考备考1

【BV1Qc411G7fB】考试形式 考45分就行上午-计算机与软件工程知识-150分钟,笔试,选择题-75分还有5分时专业英语,,一篇文章挖5个空下午-软件设计-150分钟-笔试-简答题-75分三个复习阶段考点理论学习——建立理论框架 题型全覆盖——考试全部题型了然于胸 真题强化训练——适应…

AWVS

工具说明 Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,他通过网络爬虫测试你的网站安全,检测流行安全漏洞。 AWVS可以通过SQL注入攻击、XSS(跨站脚本攻击)、目录遍历、代码执行等漏洞来审核Web应用程序的安全性并输出扫描报告。相对于…

需求改进系统设计

这个作业属于哪个课程 <班级的链接>这个作业要求在哪里 <作业要求的链接>这个作业的目标 <体验项目的流程>1、需求改进 描述改进2、系统设计3、任务分配 由于团队只有一人,所以灵活分配时间 4、测试计划 测试是否可以正常登录 测试是否可以修改密码 测试图书…

低代码技术在构建质量管理系统中的应用与优势

引言 在当今快节奏的商业环境中&#xff0c;高效的质量管理系统对于组织的成功至关重要。质量管理系统帮助组织确保产品或服务符合客户的期望、符合法规标准&#xff0c;并持续改进以满足不断变化的需求。与此同时&#xff0c;随着技术的不断进步&#xff0c;低代码技术作为一…

免费开源语音克隆-GPT-SoVITS-WebUI只需 5 秒的声音样本

语音克隆-GPT-SoVITS-WebUI 强大的少样本语音转换与语音合成Web用户界面。 功能&#xff1a; 零样本文本到语音&#xff08;TTS&#xff09;&#xff1a; 输入 5 秒的声音样本&#xff0c;即刻体验文本到语音转换。 少样本 TTS&#xff1a; 仅需 1 分钟的训练数据即可微调模型…

物联网实战--平台篇之(二)基础搭建

目录 一、Qt工程创建 二、数据库知识 三、通信协议 四、名词定义 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、Qt工程…

树状数组(二维偏序)

题目链接 https://leetcode.cn/problems/maximum-sum-queries/description/ 题目大意题目思路 二维偏序问题 -> 一维排序,一维树状数组! 题目代码 class Solution { public:int sz;vector<int> tr;int lowbit(int x){return x & -x;}void update(int x,int k){f…

《MySQL对数据库中表的结构的操作》

文章目录 一、建表二、查看表结构所有能查看到数据库&#xff0c;表的操作痕迹的本质都是服务器保存下来了这些操作记录。 三、修改表1.改表名字2.添加表记录3.添加表的更多字段4.修改表的字段5. 删除表的字段 总结 以下的数据库表的操作全是基于user_db这个数据库操作的&#…