Python 推导,内含,迭代器

Python语法–推导或内含

  • list comprehension操作可以将一个序列类型的数据集推导出另一个序列类型的数据集:
  1. 典型的情况:
for i in aiterator
  1. 利用推导获取一个平方数列表
square = [i * i for i in range(1, 11)]
  • 以上情况同如下循环
for i in range(1, 11):square.append(i * i)
  1. 字典推导语法如下格式:
{key_exp:value_exp for key_exp,value_exp in aiterator}
  • 具体案例如下:
keys = ['name', 'age', 'weight']
values = ['jiamin', '28', '81']
infoMap = {k: v for k, v in zip(keys, values)}
推导+逻辑处理
  1. 使用if语句实现选择处理遍历的元素,如下语法规则:
for i in aiterator if ...
{key_exp:value_exp for key_exp,value_exp in aiterator if ...}
  • 具体案例如下
##取偶数
square_odd = [i * i for i in range(1, 11) if i * i % 2 == 0]
##只取年龄
infoMap_odd = {k: v for k, v in zip(keys, values) if k == 'age'}
##通过字典生成字典
dict_one = {'name': 'jiamin', 'age': '28', 'weight': '81'}
dict_two = {k: v for k, v in dict_one.items() if k == 'name'}

python中迭代器

  • 迭代器是Python中一个数据量对象的容器,当使用时候每次都从其中取出一个,直到取完
自定义迭代器
  • 只要定义一个实现迭代器协议的方法类即可,主要协议方法与入学两个
__iter__() ## 方法放回对象本身,他是for语句使用迭代器的要求
__next__() ## 方法返回容器中下一个元素或数据,当容器中数据用完,应该引发StopIteration
  • 自定义迭代器代码如下:
## 自定义代器遍历
class MyIterator:def __init__(self, x=2, xmax=100):self.__mul, self.__x = x, xself.__xmax = xmaxdef __iter__(self):return selfdef __next__(self):if self.__x and self.__x != 1:self.__mul *= self.__xif self.__mul <= self.__xmax:return self.__mulelse:raise StopIterationelse:raise StopIteration
if __name__ == '__main__':myiter = MyIterator()for i in myiter:print('自定义迭代器: ', i)
内置迭代器工具
  • Python中内建了一个用于产生迭代器的函数iter(),另外一个标准库的itertools模块还有丰富的迭代器工具:
  • 内置迭代器工具实例:
## 内建迭代器遍历
class Counter:def __init__(self, x=0):self.x = xcounter = Counter()def used_iter():counter.x += 2return counter.xfor i in iter(used_iter, 8):print("内建迭代器遍历: ", i)
itertools模块中常用工具函数
import itertools## 迭代器工具类
## 从1 开始,每此以3 为步迭代
def countTest():for i in itertools.count(1, 3):print(i)if i >= 10:break##无线循环迭代
def cycleTest():for i in itertools.cycle([1, 2, 3]):print(i)## 循环迭代  输出: [2, 2, 2]
def repeatTest():print(list(itertools.repeat(2, 3)))##chain(p,q,...)链接迭代,将p,q连接起来迭代输出:[1, 2, 3, 4, 5, 6]
def chainTest():print(list(itertools.chain([1, 2, 3], [4, 5, 6])))## compress(data,selectors) 根据selectors中的值选择迭代data序列中的值 输出: [1, 3]
def compressTest():print(list(itertools.compress([1, 2, 3, 4], [1, None, True, False])))## dropwhile(pred,seq) 当pred对序列元素处理结果为False时候开始迭代seq后所有的值 输出:[1, 2, 10, 11]
def dropwhileTest():print(list(itertools.dropwhile(lambda x: x > 6, [8, 9, 1, 2, 10, 11])))## filterfalse(pred,seq) 当pred处理为假的元素 输出:[1, 2]
def filterfalseTest():print(list(itertools.filterfalse(lambda x: x > 6, [8, 9, 1, 2, 10, 11])))## takewhile 与dropwhile相反  当pred对序列元素处理结果为True时候开始迭代seq后所有的值 输出:[8, 9]
def takewhileTest():print(list(itertools.takewhile(lambda x: x > 6, [8, 9, 1, 2, 10, 11])))## tee(it, n) 将it重复n次进行迭代
def teeTest():for its in itertools.tee([0, 1], 2):for it in its:print(it)## zip_longest(p,q,...) 按每个序列中对应位置元素组合成新的元素进行迭代
def zip_longestTest():for i in itertools.zip_longest([1, 2, 3, 8], [3, 4, 5, 76], (0, 2, 3, 4)):print(i)## product(p,q,...[,n]) 迭代排列中出现元素的全排列
def productTest():for i in itertools.product([1, 2, 3, 8], [3, 4, 5, 76]):print(i)## permutations(p, q) 求p迭代序列中q个元素的全排列
def permutationsTest():print(list(itertools.permutations([1, 2, 3, 4], 4)))print(list(itertools.permutations('ASBD', 4)))## combinations(p, r)迭代序列中r个元素的组合
def combinationsTest():print(list(itertools.combinations('abc', 2)))print(list(itertools.combinations([1, 2, 3], 2)))if __name__ == '__main__':combinationsTest()

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

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

相关文章

用asp.net core结合fastdfs打造分布式文件存储系统

最近被安排开发文件存储微服务&#xff0c;要求是能够通过配置来无缝切换我们公司内部研发的文件存储系统&#xff0c;FastDFS&#xff0c;MongDb GridFS&#xff0c;阿里云OSS&#xff0c;腾讯云OSS等。根据任务紧急度暂时先完成了通过配置来无缝切换内部文件系统以及FastDFS。…

仅仅有人物没背景的图片怎么弄_五分钟写作课 人物篇 人物的出场是个关键时刻...

我看过不少故事&#xff0c;人物出场了&#xff0c;说了几句话&#xff0c;然后离开&#xff0c;读者知道他是某人的爸爸&#xff0c;学校的老师&#xff0c;某个企业的老板&#xff0c;除了这些定为之外&#xff0c;他自己是怎样的性格&#xff1f;怎样的形象呢&#xff1f;没…

数据结构与算法一篇帮助你吃下KMP算法

模式匹配 什么是模式匹配&#xff0c;我们用一个案例来说明&#xff1a; 当S “s1,s2,s3,s4 …sn” T“t1,t2,t3,t4 … tn” 在字符串S中寻找T字符串的过程就是模式匹配的过程&#xff0c;T就说模式串&#xff0c;S是主串 实现方案&#xff1a; 暴力破解&#xff0c;逐字符判…

在远程 CSM 课程中体验线上工作坊

4.11 日周六&#xff0c;我参与了由 Bob 老师组织讲授的一期 Certified Scrum Master&#xff08;即 CSM&#xff09;课程&#xff0c;从中收获颇丰&#xff0c;特记于此&#xff0c;与君分享。CSM 通常是现场授课&#xff0c;但本次由于疫情的限制导致人们不得不尽可能减少外出…

python中的max_row_Openpyxl max_row和max_column错误地报告了一个较大的figu

我的查询是处理作为Im开发的解析脚本的一部分的函数。我试图编写一个python函数来查找与excel中匹配值对应的列号。excel是用openpyxl动态创建的&#xff0c;它有第一行(来自第三列)标题&#xff0c;每个标题跨4列合并为一行。在我的后续函数中&#xff0c;我正在分析一些要添加…

数据结构与算法--力扣108题将有序数组转换为二叉搜索树

力扣108提将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识&#xff0c;也刷了不少题&#xff0c;之前的文章中大多也是算法相关的文章&#xff0c;但是感觉每次遇到树相关的题型都不能应对自如&#xff0c;因此还是有必要在相关知识上下功夫&#xff0c;因此有此次…

C#验证IP是否为局域网地址的三种方法

C#验证IP是否为局域网地址的三种方法前一阵子有【广州.NET群】的客户问起这个问题&#xff0c;说他们需要验证客户输入的网站是否为局域网。其实局域网的 IP并没有确定的定义&#xff0c;只要是局域网中&#xff0c;即可设置为任何一个 IP。但确实存在一个 内网保留地址的定义&…

扫地机器人隔板_【扫地机器人使用】_摘要频道_什么值得买

至于扫地机的单边刷好还是双边刷好&#xff0c;这个也是我原本有的问题&#xff0c;后来经过好友解答才知道&#xff0c;单边刷其实并不比双边刷效率低。对于带拖地功能的扫地机而言&#xff0c;更好的应该是单边刷。因为边刷主要的功能是将一些边缘角落的垃圾扫出来让主刷清洁…

数据结构与算法--力扣109题将有序双向链表转换为二叉搜索树

将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识&#xff0c;也刷了不少题&#xff0c;之前的文章中大多也是算法相关的文章&#xff0c;但是感觉每次遇到树相关的题型都不能应对自如&#xff0c;因此还是有必要在相关知识上下功夫&#xff0c;因此有此次总结&…

[Java基础]字符缓冲流

代码如下: package CopyJavaPack01;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException;public class CopyJavaDemo04 {public static void main(String[] args) throws IOException {BufferedWriter bw new BufferedWriter(new FileWri…

在C#中使用RESTful API的几种好方法

在C&#xff03;中使用RESTful API的几种好方法原文来自互联网&#xff0c;由长沙DotNET技术社区编译。 通过Web开发的路径&#xff0c;您发现自己迟早需要处理外部API&#xff08;应用程序编程接口&#xff09;。在本文中&#xff0c;我的目标是列出在C&#xff03;项目中使用…

spine 导出纹理_Spine 纹理打包Texture packing_官方文档中文版

马上注册&#xff0c;加入CGJOY&#xff0c;让你轻松玩转CGJOY。您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x本帖最后由 笑虾 于 2014-10-7 20:45 编辑欢迎入群 Spine2D骨骼动画 1群&#xff1a;7708065&#xff0c;2群&#xff1a;225097509大家…

SpringBoot自动装配源码解析

Spring Boot 自动装配原理 使用Spring Boot最方便的一点体验在于我们可以几零配置的搭建一个Spring Web项目&#xff0c;那么他是怎么做到不通过配置来对Bean完成注入的呢。这就要归功于Spring Boot的自动装配实现&#xff0c;他也是Spring Boot中各个Starter的实现基础&#…

自制 .NET Core 路由调试中间件

点击上方蓝字关注“汪宇杰博客”导语本文教大家如何在 .NET Core 应用中使用中间件输出路由信息以便调试程序。背景在 .NET Framework 的上古时代&#xff0c;有个叫做 RouteDebugger 的神器&#xff0c;可以在 MVC 或 Web API 应用中输出当前页面的路由信息&#xff0c;也可查…

玉柴spn码故障对照表_后处理的故障不总是尿素泵故障,也有可能是这些原因

之前说到后处理故障&#xff0c;解决的都是柴油机尿素泵、喷嘴的&#xff0c;而SCR箱同样是一个重要的部件&#xff0c;它的作用就是将尿素液与尾气中的氮氧化物充分混合并发生化学反应的场所&#xff0c;目前重卡SCR箱集SCR催化器和发动机排气消声器与一体。整体材料为不锈钢&…

SpringBoot中Bean按条件装配

Conditional条件装配 Conditional是Spring Framework提供的一个核心功能注解&#xff0c;这个注解的作用是提供自动装配的条件限制&#xff0c;一般我们在用Configuration&#xff0c;Bean的时候使用它。也就是我们在自定义Bean的注入的时候&#xff0c;我们可以通过Condition…