python列表推导式入门学习解析

作者:猿说python 时间:2022-04-25 14:28:00 

这篇文章主要介绍了python列表推导式入门学习解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一.什么是推导式

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

报错

二.条件推导式

1.语法


'''
value1:如果条件表达式condition成立,返回value1 ; 如果条件表达式不成立,返回value2 ;
condition:条件表达式
Value2:如果条件表达式condition成立,返回value1 ; 如果条件表达式不成立,返回value2 ;
'''
value1 if condition else Value2

2.实战练习

假如有这样一个需要:判断一个数字是奇数还是偶数?


# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com

@File:python_list.py
@Time:2019/9/30 20:45

@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""

# 新手代码
x = 10
if x%2 == 0:
 print("新手说:x是偶数")
else:
 print("新手说:x是奇数")

# 老司机
x = 15
print("老司机说:x是偶数") if x%2 == 0 else print("老司机说:x是奇数")

输出结果:

新手说:x是偶数

老司机说:x是奇数

观察上面代码可以看出来,选手一(新手)一共占用了5行代码,而选手二(老司机)完成同样一个功能仅仅只需要两行,这就是性价比,往往这就是职场上鉴别工作能力/升职加薪的细节。

三.列表推导式

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

1.语法


'''
语法一:
 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]

2.实战练习

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


'''
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'>

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


'''
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.效率对比

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

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

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


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秒

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

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

四.重点总结

1.注意在列表推导式书写的时候,所有表达式都必须在[]内部,因为返回值是列表list

2.列表推导式是python开发学习的知识点,多多联系,熟能生巧.

来源:https://www.cnblogs.com/shuopython/p/11722471.html

标签:python,列表,推导式
0
投稿

猜你喜欢

  • 马化腾关于产品设计与用户体验的培训

    2009-02-12 11:45:00
  • ZABBIX3.2使用python脚本实现监控报表的方法

    2021-04-11 20:15:02
  • 一文详解PyQt5中信号(Signal)与槽(Slot)

    2022-06-27 19:53:08
  • asp 得到动态数组中元素的个数

    2011-03-30 10:55:00
  • Anaconda+vscode+pytorch环境搭建过程详解

    2022-04-06 01:37:19
  • Pyorch之numpy与torch之间相互转换方式

    2022-02-09 14:50:00
  • 一劳永逸彻底解决pip install慢的办法

    2023-08-10 20:30:52
  • python办公自动化之excel的操作

    2023-11-20 14:01:01
  • 实例讲解Python的函数闭包使用中应注意的问题

    2022-05-17 23:29:53
  • JS分割字符串并放入数组的函数

    2023-08-05 15:31:03
  • python推导式的使用方法实例

    2021-03-13 09:38:25
  • 对python中的乘法dot和对应分量相乘multiply详解

    2021-01-14 15:54:58
  • 关于Python中模块的简介、定义与使用

    2021-01-25 16:09:29
  • python抓取搜狗微信公众号文章

    2021-10-25 17:56:08
  • python简单利用字典破解zip文件口令

    2023-06-27 05:36:31
  • CentOS7.2安装MySql5.7并开启远程连接授权的教程

    2024-01-16 15:40:58
  • javascript 三 级下拉选择菜单Levels对象

    2023-09-05 03:28:48
  • Pytorch 实现冻结指定卷积层的参数

    2023-05-22 07:27:21
  • MySQL 一次执行多条语句的实现及常见问题

    2024-01-12 20:03:23
  • Oracle字段根据逗号分割查询数据的方法

    2024-01-14 01:34:19
  • asp之家 网络编程 m.aspxhome.com