一.列表推导式
快速生成一个列表的表达式
格式:[变量名 for 变量名 in 可迭代对象]
小知识:如何判断一个对象是否可迭代?
# 当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型 # 通过collections模块的Iterable类型判断 from collections import Iterable print(isinstance('abc', Iterable)) # str是否可迭代 输出结果如下 True
列表推导式
# 创建一个包含0~9元素的列表,使用常见创建方式 list1 = [] for i in range(10): list1.append(i) print(list1) # 使用列表推导式 list2 = [x for x in range(10)] print(list2) 结果如下 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
可以看到结果是相同的,但是使用列表推到式更简单,还可以使用如下格式
list3 = [x for x in range(10)if x % 2 == 0] # 借助if判断,但是不能使用else print(list3) list4 = [x*x for x in range(5)] # x*x 为元素 print(list4) list5 = [i+j for i in range(5) for j in range(5)] # for双循环,也可以使用三循环 print(list5) 结果如下 [0, 2, 4, 6, 8] [0, 1, 4, 9, 16] [0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]
二.字典推导式
字典推导式和列表大致相同
# 字典推导式 dict1 = {k:v for k, v in {"name": "xiaoming", "age": 20}.items()} print(dict1) 结果入下 {'name': 'xiaoming', 'age': 20}
三.元组生成式
使用上面相同的方式生成元组,但是不能直接使用,需要遍历才能使用生成的元素
# 元组生成式 tuple1 = (x for x in range(10)) print(tuple1) # <generator object <genexpr> at 0x000001552182FF10>,不能直接使用 for i in tuple1: print(i, end=" ") 结果如下 <generator object <genexpr> at 0x000001CAA042FFC0> 0 1 2 3 4 5 6 7 8 9