pythonnumpy奇数偶数⾏互换_python列表推导式(经典代
码)(21)
⽂章⾸发,搜索:猿说python
截⽌到⽬前为⽌,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把⾃⼰代码写的更美观,效率更⾼。
⼀.什么是推导式
它将循环和条件判断结合,从⽽避免语法冗长的代码,提⾼代码推导式是从⼀个或者多个迭代器快速简洁地创建数据类型的⼀种⽅法,它将循环和条件判断结合,从⽽避免语法冗长的代码,提⾼代码运⾏效率。能熟练使⽤推导式也可以间接说明你已经超越了python初学者的⽔平。
能熟练使⽤推导式也可以间接说明你已经超越了python初学者的⽔平。
运⾏效率
⼆.条件推导式
1.语法
'''
value1:如果条件表达式condition成⽴,返回value1 ;如果条件表达式不成⽴,返回value2 ;
condition:条件表达式
Value2:如果条件表达式condition成⽴,返回value1 ;如果条件表达式不成⽴,返回value2 ;
'''
value1 if condition else Value2
2.实战练习
假如有这样⼀个需要:判断⼀个数字是奇数还是偶数?
# !usr/bin/env python
python新手代码练习# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个⼈博客地址): shuopython
@WeChat Official Account():猿说python
@Github:www.github
@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开发学习的知识点,多多联系,熟能⽣巧.
猜你喜欢:
1.python条件判断if/else
2.python列表list
3.for循环
4.python字典推导式
转载请注明:猿说Python » python列表推导式
转载请注明
内容请直接搜索:猿说
猿说python
想了解更多python内容请直接搜索:
Python教程 - 猿说Python w ww.shuopython
本⼈也还在学习python中,博客会持续更新ing,有兴趣的⼩伙伴关注⾛⼀波,推荐浏览个⼈博客⽹站:猿说python,⽂章采⽤树状分类,结构⽬录清晰⼀点,⽂章内容有问题的话欢迎给出建议或者直接留⾔.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论