python推导式

一.列表推导式

快速生成一个列表的表达式

格式:[变量名 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 
原文地址:https://www.cnblogs.com/golinux/p/10794975.html