python 推导式有什么用呢_Python学习之推导式

Python的循环

Python 的循环有两种:

for 循环

while 循环

这两种循环的功能和其他大多数的语言类似,在 Python 中,for 循环是从一个可迭代对象中按顺序获取对象中的数据;而while 循环则是对一个或者多个代码组的重复操作,所以 while 循环有一个特殊的循环--死循环,也就是永远重复执行一段代码。

由于这次主要的对象是Python的推导式,所以,这里只介绍 for 循环的基本用法,以便更好理解推导式。

for 循环和推导式

从1~10的整数中,取出所有的偶数

使用 for 循环实现

def test():

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even = []

for i in data:

if i % 2 == 0:

even.append(i)

print(even)

>>> 2, 4, 6, 8, 10

上面的程序使用了 for 循环和 if 判断共同实现,也是比较常用的实现方式。

下面使用推导式来实现同样的功能

def _test():

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even = [i for i in data if i%2 == 0]

print(even)

从代码行数来看,推导式的实现方式只用了1行代码便实现了使用 for 循环4行代码才能实现的功能(不包括相同部分的代码),这当然是值得高兴的一件事。虽然代码行数并不能绝对的代表着程序的优劣。

但使用推导式的实现的程序确实是比 for 循环的实现方式的程序,在性能方面是更优的,这是推导式天生自带的优势。这种优势可能类似于 Java 的函数式编程(这里只是一种对比)

推导式的类型

从数据结构上分,推导式一般分为列表推导式、集合推导式、字典推导式。

疑问?那元组推导式呢?

Python 中没有元组推导式,为什么?这就是理解元组这个数据结构的特点了。

元组,是一种用小括号包围的、有序的一种数据结构,但元组最重要的特点是元组不可变,也就是说元组在定义的那一刻,就已经是无法更改的一组数据了,而在推导式中,数据是可变的,因此也没有没有元组推导式了。

推导式的更多用法

在推导式中调用函数

from datetime import datetime

def convert2ampm(time24: str) -> str:

"""时间格式转换,将24小时格式转换为AM,PM时间格式"""

return datetime.strptime(time24, '%H:%M').strftime('%I:%M%p')

def test():

data = {'09:00':'SHA', '16:30':'BJS', '22:00':'SHA'}

flight_time = {convert2ampm(k):v.title() for k, v in data.iterms()}

print(flight_time)

>>>{'09:00AM':'Sha', '04:30PM':'Bjs', '10:00PM':'Sha'}

在推导式中使用多重循环

依然使用上一个例子中的时间转换函数

def _test():

f_time = {'09:00AM':'Sha', '04:30PM':'Bjs', '10:00PM':'Sha'}

when = {dest:[v for k, v in f_time.items() if k == dest] for dest in set(f_time.values())}

以上为推导式的学习分享!!!

学习内容来自《Head First Python》

你可能感兴趣的:(python,推导式有什么用呢)