列表推导式的引入
例如: 现在要创建一个新的列表 ,列表包含1-10的偶数,用普通方法如下:
# 定义空列表,存放1-10的偶数
l1=[]
# 从1-10遍历 如果i%2==0证明是偶数则添加至空列表中
for i in range(1,11):
if i %2==0:
l1.append(i)
print(l1)
用列表推导式:
l2=[x for x in range(1,11) if x%2==0]
print(l2)
总结下来:列表推导式代码更简洁,增加代码的可读性,同时后续生成器的学习要引入列表推导式
列表推导式语法
1.简单版语法:【表达式 for 变量 in 可迭代对象】
#生成一个1-10的列表,
#x代表向列表中添加的元素,而x来自于后面for循环
[x for x in range(1,11)]
2.带条件无else: [表达式 for 变量 in 可迭代对象 if 条件语句]
#生成一个0-9的偶数列表
#x代表向列表中添加的元素,x来自于后面for循环,但是x要满足后面if条件才往列表中添加
[x for x in range(10) if x%2==0]
3.带条件且有else:[表达式 if 条件语句 else 条件语句 for 变量 in 可迭代对象]
#生成一个0-10的列表,其中偶数加2 ,奇数+1
#x 如果满足条件语句就执行if前面的x+2,如果不满足则执行else后面的x+1
[x+2 if x%2==0 else x+1 for x in range(11)]
多个for循环:
语法: 表达式 第一个for 第二个for
假如要生成一个列表,每个元素由1-4的奇数,和1-4的偶数对应:[(1, 2), (1, 4), (3, 2), (3, 4)]
#不使用列表推导式,一般方法:
l1=[]
for i in range(1,5):
if i%2!=0:
for j in range(1,5):
if j%2==0:
l1.append((i,j))
print(l1)
#如果使用列表推导式:
#(i,j)是要添加到列表的数据变量
# i的取值 第一个for i in range(1,5) 条件是i%2!=0
# j的取值 第二个for j in range(1,5) 条件是j%2==0
l3=[(i,j) for i in range(1,5) if i%2!=0 for j in range(1,5) if j%2==0]
print(l3)
推导式扩展
不止列表有推导式,还有字典推导式,集合推导式(语法相同只是外边[]变成{})
#字典推导式
dict1={'name':'jimi','age':300}
#k的值是age时产生一个新的字典
d1={k:v for k,v in dict1.items() if k is 'age' }
print(d1)
#集合推导式
l1=[1,1,2,3,4,4,4]
s1={i for i in l1}
print(s1)