列表推导式:
1.只有if条件时:
[ 表达式 for i in 可迭代对象 if 条件]
2.有if else时:
[表达式1 if 条件 表达式2 for i in 可迭代对象]
# 创建一个0-9的列表
li1=[i for i in range(10)]
# 如果一个数能被2整除,那么+1,并生成一个新列表
li2= [i+1 for i in li1 if i %2==0]
# 相当于:
"""
li2=[]
for i in li1:
if i %2==0:
li2.append(i+1)
"""
# 奇数+1,偶数+2
li3=[ i+1 if i %2==0 else i +2 for i in li1]
print(li1)
print(li2)
print(li3)
输出结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
[1, 3, 3, 5, 5, 7, 7, 9, 9, 11]
3.双层 for循环:
[表达式 for i in 可循环1 for j in 可循环2]
li1=[1, 3, 5, 7, 9]
li2=["a","b","c","d"]
li3=[(x,y) for x in li2 for y in li1]
print(li3)
# 相当于
li4=[]
for i in li2:
for j in li1:
li4.append((i,j))
print(li4)
#输出结果如下:
[('a', 1), ('a', 3), ('a', 5), ('a', 7), ('a', 9), ('b', 1), ('b', 3), ('b', 5), ('b', 7), ('b', 9)]
[('a', 1), ('a', 3), ('a', 5), ('a', 7), ('a', 9), ('b', 1), ('b', 3), ('b', 5), ('b', 7), ('b', 9)]
拓展内容:
# 将li1和li2组成一个一一对应的字典列表
li1=[1, 3, 5, 7,]
li2=["a","b","c","d"]
# 这个使用了map函数,map函数是把后面两个参数依次提取,然后放到lambda中进行组合成字典
li3=[ i for i in map(lambda x,y:{x:y},li1,li2)]
print(li3)
#得到结果为:
[{1: 'a'}, {3: 'b'}, {5: 'c'}, {7: 'd'}]
集合推导式:
{表达式 for i in iterable(可迭代对象) if 条件}
{表达式1 if 条件 表达式2 for i in 可迭代对象}
# 需求:将下列的代码进行去重,并取出对应的偶数
li1=[1, 3, 5, 7,2,4,8,6,1, 3, 5, 7,2,4,8,40]
li3={i for i in li1 if i %2==0}
print(li3)
# 输出结果如下:
{2, 4, 6, 8, 40}
字典推导式:
{ key:value for 循环}
dic3={1: 'a', 3: 'b', 5: 'c', 7: 'd'}
# 互换键值
li4={v:k for k,v in dic3.items()}
print(li4)
# 输出结果:
{'a': 1, 'b': 3, 'c': 5, 'd': 7}
# 案例2:
food=["huoguo","niurou","xiangcai"]
dic1={k+1:v for k,v in enumerate(food)}
print(dic1)
#知识点补充:
enumerate(sequence, [start=0]):
sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置。
# 输出结果如下:
{1: 'huoguo', 2: 'niurou', 3: 'xiangcai'}