推导式(列表、集合、字典):

列表推导式:

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'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值