Py学习  »  Python

Python技巧——列表生成式

Python知识驿站 • 1 周前 • 26 次点击  

◤一、引言◢

    今天为大家介绍一个python使用技巧——列表生成式。列表生成式是用一行代码快速制作列表的方法,在进行程序编程、调测时可以快速制作需要的测试数据。有时候也叫列表推导式,一个意思,大家不要纠结于名字。

◤二、if语句列表生成式◢

    if语句的列表生成式类似C的三元运算符?:,但其输出的是一个元素的列表。

>>> #判断 a,b的大小>>> a = 10>>> b = 20>>> # if的常规语法>>> if a >= b :...     print('{0} 大于等于 {1}'.format(a,b))... else:...     print('{0} 小于 {1}'.format(a,b))...10 小于 20>>> # if的列表生成式语法>>> c = [print('{0} 大于等于 {1}'.format(a,b)) if a > b else print('{0} 小于 {1}'.format(a,b))]10 小于 20>>> c[None]

    最后返回值赋给变量c,内容为None。这是因为print()函数的返回值是None,如果我们替换为其他的值,则会相应的显示。但要注意,这种方法输出的是一个列表,if语句的列表生成式输出的是一个元素的列表,实际应用较少。

    if的列表生成式语法结构:

◤三、for语句的列表生成式◢

    for语句的列表生成式是较为常见的应用,可以用一条语句生成复杂的列表数据。

# 使用*画一个直角三角形,共计5层,逐层递加。>>> # for的常规语法>>> for i in range(5):...     print('{0: <10}'.format('*'*(i+1)))...***************>>> # for的列表生成式语法>>> c = [print('{0: <10}'.format('*'*(i+1))) for i in range(5)]***************>>> c[NoneNoneNoneNoneNone]

    这个for的列表生成式返回值赋值给变量c,内容为 5个元素的列表,每个元素均为None这是因为print()函数的返回值是None,下面我们改为输出i

>>> c = [i for i in range(5)]>>> c[01234]

    看到,修改后变量c的值变为了列表[0, 1, 2, 3, 4]。for的列表生成式可以快速制作一个满足要求的列表数据,比较常用。而且它还可以嵌套if语句、lambda函数或自定义函数,实现更多元的列表。

    for的列表生成式语法结构:

    对于上述的列表生成式,语句块部分是可以嵌套更多的语句的,如继续嵌套for的列表生成式、if的列表生成式,或者其它的。

◤四、总结◢

    本节所讲述的列表生成式方法也适合生成器的制作,方法是把方括号替换为圆括号,有兴趣的小伙伴可以自行实验一下。生成器可以较好地控制内存占用问题,对内存不足的场景较为适应。

    下面是生成器和列表内存占用的一个示例:

    生成器仅占用200个字节,列表占用了920个字节,随着数据量的增加差异会更大。这主要是因为生成器仅在需要时生成数据,不像列表是一次性把所有的数据都记录到内存中。

-----------------------------

延伸阅读:

    Python入门:第 1 章 Python 介绍

    Python入门:第 2 章 环境搭建与第一个程序

    Python入门:第 3 章 基本语法

    Python入门:第 4 章 数据结构

    Python入门:第 5 章 函数

    Python入门:第 6 章 类

    Python入门:第 7 章 文件读写

    Python入门:第 8 章 Python多进程

    Python入门:第 9 章 进程间通信

    Python入门:第 10 章 消息队列

    自动化办公1——初识Pandas

    自动化办公2——Pandas数据结构

    自动化办公3——Pandas数据操作1

    自动化办公3——Pandas数据操作2

    自动化办公4——Pandas数据组合、连接与重构

    自动化办公5——Pandas数据透视表

    自动化办公6——Pandas数据分组1

    自动化办公6——Pandas数据分组2

    自动化办公7——Pandas画图

    数据可视化——matplotlib基础

    数据可视化——matplotlib进阶

    数据可视化——seaborn初识

    数据可视化——seaborn绘制关系图

    数据可视化——seaborn绘制分布图

    科学计算1——Numpy初识

    科学计算2——Numpy数组操作

    科学计算3——Numpy数组变形

    科学计算4——Numpy的索引与切片

     科学计算5——Numpy的基本计算

    科学计算6——Numpy的矩阵运算

    使用 NumPy 求解线性方程组:一个完整案例


更多内容请查看微信公众号。


---------知识需要分享,需要传播---------

这里是Python知识驿站,致力于知识传播,让更多人了解Python、使用Python、爱上Python。如果你是一名程序员、业余开发者、IT从业者,或者任何一名对Python感兴趣的人,都可以加入Python知识驿站,让我们一同畅享在知识的海洋中。


---------关注我,获得更多知识---------

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/184136
 
26 次点击