VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • Python 列表推导式 - Python零基础入门教程

一.Python 列表推导式简介

上一篇文章中我们介绍了 Python 条件推导式,实际上就是把多行代码合并为一行代码的操作,使用列表推导式可以让程序的运行效率更高(文章末尾有具体讲解),其实列表推导式其实和条件推导式类似;

Python 列表推导式是从一个或者多个迭代器快速简洁地创建数据类型的一种方法,它将循环和条件判断结合,从而避免语法冗长的代码,提高代码运行效率能熟练使用推导式也可以间接说明你已经超越了 Python 初学者的水平**。**

Python 推导式相关:

  • 条件推导式
  • 列表推导式
  • 字典推导式

二.Python 列表推导式语法

列表推导式是条件推导式和循环一起配合使用,并返回一个列表 list,并且整个表达式需要在[]内,因为返回值也是列表 list。

'''
语法一:
    exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则不返回
    x:for循环中变量
    data:一个序列(比如:列表/元组/字符串等)
    condition:条件表达式
'''

[exp1 for x in data if condition]

'''
语法二:
    exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
    condition:条件表达式
    exp2:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
    x:for循环中变量
    data:个序列(比如:列表/元组/字符串等)

'''

[exp1 if condition else exp2 for x in data]

三.Python 列表推导式练习

1.Python 列表推导式案例一

获取 0 ~ 20 的所有偶数并且乘以 10,并返回所有计算之后的结果。示例代码如下:(使用 Python 列表推导式语法一实现)

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python Python 列表推导式.py
@Time:2021/3/27 08:00
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

'''
1.因为是获取0~20,包括20,所以使用range(0,21)
2.x*10 等价 语法一中的exp1
3.x%2 == 0 等价 语法一中的条件表达式condition
4.range(0,21) 等价 语法一中的data(序列)
'''

list1 = [x*10 for x in range(0,21) if x%2 == 0]
print(list1)
print(type(list1))

'''
输出结果:
[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
<class 'list'>

'''

2.Python 列表推导式案例二

将 0 ~ 20 的偶数乘以 10 ,奇数乘以 100 ,并返回所有计算之后的结果。示例代码如下:(使用 Python 列表推导式语法二实现

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python Python 列表推导式.py
@Time:2021/3/27 08:00
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

'''
1.因为是获取0~20,包括20,所以使用range(0,21)
2.x*10 等价 语法二中的exp1
3.x*100 等价 语法二中的exp2
4.x%2 == 0 等价 语法二中的条件表达式condition
5.range(0,21) 等价 语法一中的data(序列)
'''

list2 = [x*10 if x%2 == 0 else x*100 for x in range(0,21) ]
print(list2)
print(type(list2))

'''
输出结果:
[0, 100, 20, 300, 40, 500, 60, 700, 80, 900, 100, 1100, 120, 1300, 140, 1500, 160, 1700, 180, 1900, 200]
<class 'list'>

'''

3.Python 列表推导式和循环效率对比

可能有童鞋纳闷,我明明 for 循环 或者 while 循环就能实现的功能,为毛要用这鸟玩意推导式?

使用列表推导式的效率远远高于 for 循环,可能执行一句 print(“helloworld”) 对于 cpu 而已只需要 0.0002 秒,你可能感觉不到差距,如果需要输出一亿次 helloworld 呢?往往细节觉得成败!

假如有一个需求:将 0 ~ 10000000 (一亿)以内的所有整数存到列表中,对比一下 Python 列表推导式 和 for 循环耗时情况:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python Python 列表推导式.py
@Time:2021/3/27 08:00
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

import time # 添加time模块,用于统计代码运行时间

#一共添加10000000次数据到列表中
total_num = 10000000

#使用列表推导式
start_time = time.time()
list1 = [x for x in range(0,total_num)] # 列表推导式
end_time = time.time()
print("使用列表推导式耗时:{}秒".format(end_time-start_time))

#使用普通for循环
start_time = time.time()
list2 = list()
for x in range(0,total_num): # for循环
    list2.append(x)
end_time = time.time()
print("使用普通for循环耗时:{}秒".format(end_time-start_time))

'''
输出结果:
使用列表推导式耗时:0.5455152988433838秒
使用普通for循环耗时:1.2068836688995361秒
'''

输出结果很明显,实现通用的功能,Python 列表推导式的效率整整高出普通 for 循环一倍。

最后温馨提醒:测试请把循环次数改小一点,毕竟刚开始不小心多加了几圈圈,电脑死机了!

四.重点总结

  • 1.注意在 Python 列表推导式书写的时候,所有表达式都必须在 [] 内部,因为返回值是列表 list
  • 2.列表推导式是 Python 开发学习的知识点,多多联系,熟能生巧.
文章出处:https://www.cnblogs.com/shuopython/p/14838385.html

相关教程