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》