生成式是python中的一种高级玩法,起码看起来显得要高级一点。它可以使用简单的一行代码实现列表、字典等数据类型的创建或数据类型的转换等任务。另外,它和生成器还有些许关联。

列表生成式

列表生成式即生成列表的生成式,写法简单而优雅,可以将多行代码用一行代码实现,且效率较高。一般用于创建简单的新列表或对过滤出新列表。另外,还可以做数据类型间的转换。

# 方式1
nums = [i for i in range(10) if i%2 == 0]       # nums= [0, 2, 4, 6, 8]
nums2 = [i for i in nums if i >5]               # num2= [6, 8]

# 方式2
nums = list(i for i in range(1, 5))             # nums = [1, 2, 3, 4]

# 数据类型转换
a = {"name":"jack", "age": 18}
a2 = [key for key in a]                         # a2 = ['name', 'age']

字典生成式

字典生成式即生成字典的生成式。特殊场合下,可以写出很优美的代码。也分为两种生成方式,一种默认的使用{},括号体内使用循环生成。另外配合内置方法的使用,效果很优美。

# 方式1
{k:v for k,v in enumerate(range(1,5))}  # {0: 1, 1: 2, 2: 3, 3: 4}

# 方式2
li = [[1,2], (2,3)]
dict(x for x in li)         # {1: 2, 2: 3}

dict(zip([1,2], [3,4]))     # {1: 3, 2: 4}

集合生成式

# 方式1
a = set(i for i in range(1,5))      # {1,2,3,4}
# 方式2
b = {i for i in range(1,5)}         # {1,2,3,4}

元组生成式

元组生成式即生成元组的生成式,按理说可以使用(),括号内循环的方式生成元组生成式,但是()被python中的生成器占用,就只剩下一种方式生成元组生成式。

# 方式1
tuple(x for x in range(1,5))        # (1, 2, 3, 4)

# 数据类型转换
nums = [3,4,5,6]
tuple(x for x in nums)              # (3, 4, 5, 6)

生成器生成式

使用()内循环的方式可以生成最简单的生成器,生成器替代列表的使用可以减小内存的消耗。生成器可以通过 next输出数据,但最后一个后会报错;一般使用for循环的方式使用生成器。其实,range(10)本质上就是一个最简单的生成器。

a = (i for i in range(1,5))     # <generator object <genexpr> at 0x0000027B1B5994C8>

print(next(a))      # 1
print(next(a))      # 2
print(next(a))      # 3
print(next(a))      # 4
print(next(a))      # 抛出异常StopIteration

# 可以使for循环的方式避免异常
print([i for i in a])   # [1,2,3,4]

python-生成式的基本使用的更多相关文章

  1. python生成式

    本篇将介绍Python的列表生成式,更多内容请参考:Python列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个 ...

  2. python 生成式和生成器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/10/17 21:46 # @Author : lijunjiang # @Fi ...

  3. python生成式:列表、字典、集合

    python的3类生成式: 列表生成式 字典生成式 集合生成式 1.python列表生成式 my_data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(&quo ...

  4. python生成式和生成器

    一,生成式和生成器 1,列表生成式 mylist = [ i*i for i in range(3) if i>1 ] print(mylist) 运行结果:[4] 可以发现,快速生成列表的表达 ...

  5. python 生成式,生成器,迭代器,可迭代

    1.生成器就是迭代器2.生成式用[](中括号)包起来,生成器用()(圆括号)包起来3.生成式在使用前已经在内存中存在,生成器只有在使用时才生成4.迭代器是可以用.__next__()不断取出下一值,直 ...

  6. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  7. python【5】-生成式,生成器

    一.条件和循环 1. if语句 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> else: <执行4> 例如: ...

  8. python基础——列表生成式

    python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...

  9. python学习笔记——列表生成式与生成器

    1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...

  10. Python的高级特性之切片、迭代、列表生成式、生成器

    切片 切片就是获取一个list.tuple.字符串等的部分元素 l = range(100) #取[0,5)元素 print(l[:5]) #[0, 1, 2, 3, 4] #在[0,99]中每隔10 ...

随机推荐

  1. spring-security问题记录

    一.错误信息 Could not decode JSON for additional information: BaseClientDetails 2019-12-03 22:18:37.239 W ...

  2. 被我误解的max_connect_errors

    第一节  什么是max_connect_errors 一开始接触这个参数的时候,感觉他和max_connections的含义差不多,字面意思简单明了,这个参数的含义是最大连接错误数,翻翻mysql的文 ...

  3. .net 关于路径的总结

    原文:https://www.cnblogs.com/hehehehehe/p/6196155.html https://www.cnblogs.com/yugongmengjiutian/artic ...

  4. maven整合S2SH

    1.pom.xml <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.ap ...

  5. 2018-12-25-win10-uwp-显示SVG

    title author date CreateTime categories win10 uwp 显示SVG lindexi 2018-12-25 10:37:5 +0800 2018-2-13 1 ...

  6. CentOS6.5系统解决中文乱码问题

      一.    问题详情 Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK. ...

  7. 安装kali linux 后出现文字乱码问题

    在安装kali时我选择中文安装,结果安装完成后出现文字乱码现象 在经过上网查询后,采用了CSDN博客站中的 stubbornness1219 这位博主的解决方案成功将问题解决. 解决方案:终端下执行s ...

  8. C#第一个程序Helloworld

  9. 使用 Visual Studio 调试器附加到运行的进程

    为什么调试附加进程? Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程. 可以使用此附加功能执行以下操作: 调试并非在 Visual Studio 中创建的应用 ...

  10. 【2019 Multi-University Training Contest 5】

    01: 02:https://www.cnblogs.com/myx12345/p/11649221.html 03: 04:https://www.cnblogs.com/myx12345/p/11 ...