当前位置: 首页 > news >正文

Python高级编程

描述

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

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)

相关文章:

Python高级编程

描述 集合,列表生成式,生成器,迭代器,切片 Python 中的集合类型是一种无序、不重复的数据容器,用于存储可哈希(hashable)的元素。Python 提供了两种内置的集合类型:set 和 frozens…...

leetCode75. 颜色分类

leetCode75. 颜色分类 题目思路 代码 class Solution { public:void sortColors(vector<int>& nums) {for(int i 0, j 0, k nums.size() - 1; i < k;){if(nums[i] 0) swap(nums[i],nums[j]);else if(nums[i] 2) swap(nums[i],nums[k--]);else if(nums[i] …...

选择器、pxcook软件、盒子模型

结构伪类选择器 定义&#xff1a;根据结构的元素关系来查找元素。 <title>Document</title><style>li:first-child{color:aqua ;}li:last-child{color: aqua;}li:nth-child(3){color: aqua;}</style> </head> <body><ul><li>…...

商城系统秒杀功能设计思想

业务特点 1、瞬时并发量大&#xff0c;秒杀时会有大量用户在同一时间进行抢购&#xff0c;瞬时并发访问量突增几倍、甚至几十倍以上 2、库存量少&#xff0c;一般秒杀活动商品量很少&#xff0c;这就导致了只有极少量用户能成功购买到。 3、业务和流程较为常见&#xff0c;一般…...

#初始化列表

1.再谈构造函数 1.1构造函数的组成 构造函数包括函数体赋值与初始化列表初始化。 1.2函数体赋值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day; };虽然上述构造函数调用之后&…...

Vue-组件中的data

一个组件的data选项必须是一个函数。保证每个组件实例&#xff0c;维护独立的一份数据对象。如下图&#xff1a; 组件一旦封装好了&#xff0c;可以使用多次&#xff0c;比如数字框组件使用了三次&#xff1a; 每次创建新的组件实例&#xff0c;都会重新执行一次data函数&#…...

抖音小店达人佣金应该怎么结算呢?给达人设置多少佣金合适?

大家好&#xff0c;我是电商小V 咱们在运营抖音小店的时候一定会遇到被达人催促结算佣金的情况&#xff0c;咱们给达人合作的时候都会遇到过新手达人&#xff0c;就是给咱们直播带货之后催促咱们赶紧结算商品的佣金&#xff0c; 但是咱们都需要知道一点&#xff0c;那就是小店的…...

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…...

MYSQL数据库专业术语及创建数据表详细讲解{sql语句创建数据库语句及条件子句解析,编码格式解析,创建数据表解析,表定义字段解析,主键约束解析}

MYSQL数据库中的专业术语 数据库&#xff08;Database&#xff09;&#xff1a;存储数据的集合&#xff0c;是数据的逻辑容器。 表&#xff08;Table&#xff09;&#xff1a;数据库中存储数据的结构&#xff0c;由行&#xff08;记录&#xff09;和列&#xff08;字段&#x…...

Kubernetes的13个常用命令,你都熟悉吗

Kubernetes&#xff08;K8s&#xff09;是一个容器编排和管理工具&#xff0c;用于部署、管理和扩展容器化应用程序。下面是一些常用的 Kubernetes 命令及其含义&#xff1a; kubectl create: 创建一个资源对象&#xff0c;如 Pod、Deployment、Service 等。kubectl apply: 应…...

python从0开始学习(三)

目录 前言 1、类型转换 1.1 隐式类型转换 1.2 显式类型转换 2、eval函数 总结 前言 上篇我们讲了python中的变量与常量&#xff0c;以及变量类型。本篇文章将接着往下讲。 1、类型转换 python中的数据类型转换包括两种&#xff1a;隐式类型转换和显式类型转换。 1.1 隐式…...

golang判断通道chan是否关闭的2种方式

chan通道在go语言的办法编程中使用频繁&#xff0c;我们可以通过以下2种方式来判断channel通道是否已经关闭&#xff0c;1是使用 for range循环&#xff0c;另外是通过 for循环中if 简短语句的 逗号 ok 模式来判断。 示例代码如下&#xff1a; //方式1 通过for range形式判断…...

npm install 会报错npm audit错误,会提示你有多少个漏洞需要结局等

npm install 会报错 npm audit… 错误&#xff0c;会提示你有多少个漏洞需要结局&#xff0c;对应的包版本不应该低于多少等等问题 当使用npm i 命令的时候会出现以下问题 如果是个新手的话&#xff0c;建议直接关闭npm的audit检查。这样可以保证npm的audit不会影响你的初始…...

揭秘磁盘参数错误:数据恢复的黄金法则与预防策略

磁盘参数错误&#xff0c;这是一个让人头疼的电脑问题&#xff0c;可能会导致重要数据的丢失。不过别担心&#xff0c;本文将为你详细解析磁盘参数错误的来龙去脉&#xff0c;以及提供有效的数据恢复方法和预防措施。 一、什么是磁盘参数错误 磁盘参数错误通常指的是在读取或写…...

oracle常见操作

修改字段长度 ALTER TABLE my_table MODIFY my_column VARCHAR2(new_length);修改字段名称 ALTER TABLE my_table RENAME COLUMN old_column TO new_column;修改字段非空属性 -- 由非空改成允许为空 ALTER TABLE my_table MODIFY my_column NULL; -- 由允许为空改成非空 ALT…...

SkyWalking 自定义Span并接入告警

图容易被CSDN吞掉&#xff0c;我在掘金也发了&#xff1a;https://juejin.cn/post/7361821913398837248 我就是这么膨胀 最近在做 OpenAI API 套壳&#xff0c;当我使用 okhttp-sse 这个库进行流式内容转发的时候&#xff0c;我发现有些回调方法 SkyWalking 不能抓取到。这就…...

代理IP,助力海外社媒运营!

社交媒体在营销中的作用不仅仅是传播信息&#xff0c;更是明确品牌定位、建立品牌形象、加强用户互动、提升市场竞争力的重要途径。因此很多外贸从业人员都会使用海外社媒平台进行客户的寻找和开发&#xff0c;这也意味着他们需要深入了解目标市场的文化、价值观、语言习惯和消…...

手撕spring框架(3)

手撕spring框架&#xff08;3&#xff09; 相关系列 手撕spring框架&#xff08;1&#xff09; 手撕spring框架&#xff08;2&#xff09; 手撕spring框架&#xff08;4&#xff09; InitializingBean 接口详解 什么是 InitializingBean 接口&#xff1f; InitializingBean 接…...

Swift手撸轮播效果

一、创建ScrollView objcMembers class LSLottieAnimView: UIView, UIScrollViewDelegate {private var scrollView: UIScrollView UIScrollView()func addScrollView() {scrollView.showsHorizontalScrollIndicator falsescrollView.isPagingEnabled true// 自定义framesc…...

数据分析——业务数据描述

业务数据描述 前言一、数据收集数据信息来源企业内部数据源市场调查数据源公共数据源和第三方数据源 二、公司内部数据客户资料数据销售明细数据营销活动数据 三、市场调查数据观察法提问法实验法 四、公共数据五、第三方数据六、数据预处理七、数据清洗丢弃部分数据补全缺失的…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...

自定义线程池1.2

自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本&#xff0c;将线程池中的线程数量交给使用者决定&#xff0c;并且将线程的创建延迟到任务提交的时候&#xff0c;在本文中我们将对这个版本进行如下的优化&#xff1a; 在新建线程时交给线程一个任务。让线程在某种情况下…...