首页 > 其他分享 >解析式和生成器表达式

解析式和生成器表达式

时间:2022-12-03 00:46:25浏览次数:36  
标签:10 迭代 生成器 列表 print 解析 表达式

列表解析式

列表解析式List Comprehension,也叫列表推导式

x = []
for i in range(10):
    x.append((i+1)**2)
print(x)

写成推导式

[(i+1)**2 for i in range(10)]
Out[2]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

语法

​ [返回值 for 元素 in 可迭代对象 if 条件]

​ 使用中括号[],内部是for循环,if条件语句可选

​ 立即返回一个新的列表

求10以内的偶数

[i for i in range(2,10,2)]
Out[3]: [2, 4, 6, 8]

复杂语法

for循环套if判断语句生成列表

[expr for item in iterable if cond1 if cond2]

#等价于
ret = []
for item in iterable:
    if cond1:
        if cond2:
            ret.append(expr)

for循环套for循环生成列表

[expr for i in iterable1 for j in iterable2 ]

#等价于
ret = []
for i in iterable1:
    for j in iterable2:
        ret.append(expr)

练习

列表解析式打印九九乘法表

[print('{}*{}={:<4}'.format(i, j, i * j), end='\t' if i !=j else '\n') for i in range(1, 10) for j in range(1, i+1) ]
# 运行结果
1*1=1   
2*1=2   	2*2=4   
3*1=3   	3*2=6   	3*3=9   
4*1=4   	4*2=8   	4*3=12  	4*4=16  
5*1=5   	5*2=10  	5*3=15  	5*4=20  	5*5=25  
6*1=6   	6*2=12  	6*3=18  	6*4=24  	6*5=30  	6*6=36  
7*1=7   	7*2=14  	7*3=21  	7*4=28  	7*5=35  	7*6=42  	7*7=49  
8*1=8   	8*2=16  	8*3=24  	8*4=32  	8*5=40  	8*6=48  	8*7=56  	8*8=64  
9*1=9   	9*2=18  	9*3=27  	9*4=36  	9*5=45  	9*6=54  	9*7=63  	9*8=72 ` 	9*9=81  

有一个列表lst = [1,4,9,16,2,5,10,15],生成一个新列表,要求新列表元素是lst相邻2项的和

lst = [1, 4, 9, 16, 2, 5, 10, 15]
print([lst[i] + lst[i + 1] for i in range(len(lst) - 1)])

"0001.abadicddws" 是ID格式,要求ID格式是以点号分割,左边是4位从1开始的整数,右边是10位随机小写英文字母。请依次生成前100个ID的列表

import random
x=['{:04}.{}'.format(i, ''.join([chr(random.randint(97, 122)) for i in range(10)])) for i in range(10)]
print(x)
0000.jnvlhexuup
0001.emoegpunnr
0002.aquefvpjxv
0003.dadcmgteve
0004.pswucemswb
0005.ozomkpbgkl
0006.stslcyjnzd
0007.wpudukauto
0008.pjavoruhjf
0009.lkwhfdrlkc

生成器表达式

语法

​ (返回值 for 元素 in 可迭代对象 if 条件)

​ 列表解析式的中括号换成小括号就行了

​ 返回一个生成器对象

和列表解析式的区别

​ 生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值

​ 列表解析式是立即返回值

生成器对象

​ 可迭代对象

​ 迭代器

生成器表达式

延迟计算

返回可迭代对象迭代器,可以迭代

只能迭代一次

#生成器生成的列表只能遍历一次
a=(i for i in range(5))
for j in a:
    print(j)
print('-'*30)
for j in a:
    print(j)
    
#结果
0
1
2
3
4
------------------------------

列表解析式

立即计算

返回可迭代对象列表,不是迭代器

可反复迭代

#列表解析式生成的列表可以反复遍历
a=[i for i in range(5)]
for j in a:
    print(j)
print('-'*30)
for j in a:
    print(j)
    
#结果
0
1
2
3
4
------------------------------
0
1
2
3
4

集合解析式

语法

​ {返回值 for 元素 in 可迭代对象 if 条件}

​ 列表解析式的中括号换成大括号{}就变成了集合解析式

​ 立即返回一个集合

字典解析式

语法

​ {key:value for 元素 in 可迭代对象 if 条件}

​ 列表解析式的中括号换成大括号{},元素的构造使用key:value形式

​ 立即返回一个字典

标签:10,迭代,生成器,列表,print,解析,表达式
From: https://www.cnblogs.com/guangdelw/p/16946059.html

相关文章

  • python 函数与生成器
    函数Python函数​ 由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元​ 完成一定的功能函数的作用​ 结构化编程对代码的最基本的封装,一般按......
  • Mybatis Plus Generator代码生成器
    MybatisPlusGenerator代码生成器importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.baomidou.mybatisplus.generator.FastAutoGenerator;importc......
  • 基于Antlr的Modelica3.5语言解析
    背景Modelica语言是一种统一面向对象的系统建模语言官方文档中明确写明了语法规范在附录的第一章词法,第二章语法都完整的罗列的语言规范,对于Antlr适配特别好只需要把[......
  • 常用的正则表达式总结
    非负整数:^\d+$正整数:^[0-9]*[1-9][0-9]*$非正整数:^((-\d+)|(0+))$负整数:^-[0-9]*[1-9][0-9]*$整数:^-?\d+$非负浮点数:^\d+(\.\d+)?$正浮点数:^((0-9)+\.[0-9]*[1-9]......
  • xml_解析_解析方式和xml_解析_常见的解析器
    xml_解析_解析方式:操作xml文档中解析(读取):操作xml文档,将文档中的数据读取到内存中写入:将内存中的数据保存到xml文档中,持久化的存储 解析xml的方式:DOM:将标记语言......
  • xml_解析_Jsoup_快速入门和xml_解析_Jsoup_Jsoup对象
    xml_解析_Jsoup_快速入门:快速入门:1.导入jar包:2.获取Document对象:3.获取对应的标签Element对象:4.获取数据publicclassJsoupDemo1{publicstaticvoi......
  • xml_解析_Jsoup_Document对象和xml_解析_Jsoup_Element对象
    xml_解析_Jsoup_Document对象:Document:文档对象,代表内存中的dom树获取Element对象getElementById(Stringid):根据id属性值获取唯一的element对象getEleme......
  • java利用正则表达式提取字符串中的整数和小数部分
    最近开发遇到一个新的东西,就是前端传过来一个字符串,需要将里面的数字提取出来,倒腾了一天,最后还是没有倒腾出来,最后还是借鉴大佬的方法。记录一下。首先是前端传来的字符串​......
  • xml_解析_Jsoup_根据选择器查询与xml_解析_Jsoup_根据Xpath查询
    xml_解析_Jsoup_根据选择器查询 快捷查询方式:1.selector:选择器  使用的方法:Elements select​(StringcssQuery)......
  • 使用JDOM2.0.6 操作/解析xml
    学习Spring第一天,了解jdom是如何解析xml文件的首先下载jdom的jar包,这里的实例使用的是JDOM2.0.6,与JDOM1.0.不同的是引入的包是有区别的,JDOM2.0.6的jar包使用时导入的是im......