python列表推导式(16)-创新互联

截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高。

创新互联-专业网站定制、快速模板网站建设、高性价比蒙城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式蒙城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖蒙城地区。费用合理售后完善,10多年实体公司更值得信赖。

一.什么是推导式

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

python列表推导式(16)

二.条件推导式

1.语法

1

2

3

4

5

6

7

8

'''

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

condition:条件表达式

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

'''

value1ifconditionelseValue2

2.实战练习

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# !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

ifx%2==0:

print("新手说:x是偶数")

else:

print("新手说:x是奇数")

# 老司机

x=15

print("老司机说:x是偶数")ifx%2==0elseprint("老司机说:x是奇数")

输出结果:

1

2

新手说:x是偶数

老司机说:x是奇数

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

三.列表推导式

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

1.语法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

'''

语法一:

exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则不返回

x:for循环中变量

data:一个序列(比如:列表/元组/字符串等)

condition:条件表达式

'''

[exp1forxindataifcondition]

'''

语法二:

exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2

condition:条件表达式

exp2:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2

x:for循环中变量

data:个序列(比如:列表/元组/字符串等)

'''

[exp1ifconditionelseexp2forxindata]

2.实战练习

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

1

2

3

4

5

6

7

8

9

10

'''

1.因为是获取0~20,包括20,所以使用range(0,21)

2.x*10 等价 语法一中的exp1

3.x%2 == 0 等价 语法一中的条件表达式condition

4.range(0,21) 等价 语法一中的data(序列)

'''

list1=[x*10forxinrange(0,21)ifx%2==0]

print(list1)

print(type(list1))

输出结果:

1

2

[0,20,40,60,80,100,120,140,160,180,200]

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

1

2

3

4

5

6

7

8

9

10

11

'''

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*10ifx%2==0elsex*100forxinrange(0,21)]

print(list2)

print(type(list2))

输出结果:

1

2

[0,100,20,300,40,500,60,700,80,900,100,1100,120,1300,140,1500,160,1700,180,1900,200]

3.效率对比

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

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

total_num=10000000

#使用列表推导式

start_time=time.time()

list1=[xforxinrange(0,total_num)]# 列表推导式

end_time=time.time()

print("使用列表推导式耗时:{}秒".format(end_time-start_time))

#使用普通for循环

start_time=time.time()

list2=list()

forxinrange(0,total_num):# for循环

list2.append(x)

end_time=time.time()

print("使用普通for循环耗时:{}秒".format(end_time-start_time))

输出结果:

1

2

使用列表推导式耗时:0.5455152988433838秒

使用普通for循环耗时:1.2068836688995361秒

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

python列表推导式(16)

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

四.重点总结

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

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

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:python列表推导式(16)-创新互联
地址分享:http://pwwzsj.com/article/pshgd.html