当前位置:   article > 正文

python3:列表推导式,生成器表达式,字典推导式 三种用法讲解_使用列表推导式求0~20之间的奇数

使用列表推导式求0~20之间的奇数

列表推导式

任务:
我们有个任务是提取0—20的奇数位.
1.首先我们想到的是用for循环加if做到,如下:

b=[]
for i in range(21):
    if i%2==1:
        b.append(i)
print(b)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.懂list 也可以想到这样的用法

b=list(range(21))
print(b)
print(b[1::2])
  • 1
  • 2
  • 3

都可以打印出这样的结果:

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

  • 1
  • 2

用第二种方法是有局限性,如果过于复杂的场景并不适用,现在我们隆重的介绍列表推导式

3.列表推导式

b=list(range(21))
b=[i for i in b if i%2==1]  
print(b)
  • 1
  • 2
  • 3

我们只用一行代码就解决了我们的任务,下边我介绍更复杂的场景
任务:我们要抽取 0-20的奇数并计算其平方.

def square(i):
    return i*i
b=list(range(20))

b=[square(i) for i in b if i%2==1]

print(b)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

打印结果:

[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]
  • 1

代码很简单应该都能看懂. 解析下结果结构
[i for i in b if i%21] ,有三个结构 i,for i in b,if i%21
1.i 是指填充到列表的值
2.for i in b 是遍历b
3.if i%2==1 对循环的值进行过滤.

注意:这种方式只适合简单的场景,性能高于列表操作
过于复杂我们就不需要用了,可读性是我们追求的

生成器表达式

我们稍微改变下 如下:

b=list(range(21))
b=(i for i in b if i%2==1)
print(b)
  • 1
  • 2
  • 3

打印结果:

<generator object <genexpr> at 0x000000000221AE60>
  • 1

通过结果分析出显示了generator 这就是生成器的标识,不要以为用小括号就是
set,tuple.这个注意下.
他自己是可以遍历的,如下:

b=list(range(21))
b=(i for i in b if i%2==1)

for i  in b:
    print(i)
  • 1
  • 2
  • 3
  • 4
  • 5

打印结果:

1
3
5
#
  • 1
  • 2
  • 3
  • 4

生成器的内部原理和适用场景,以后我会在专门的章节写,不是本章节的重点.

字典推导式

上边介绍了用一行代码可以生成list,我们同样的原理也可以生成dict.
参考如下的代码

b={"boby1":30,"boby2":60}

dict={value:(key+1) for value,key in b.items() }

print(dict)
  • 1
  • 2
  • 3
  • 4
  • 5

和上边的区别是【】变成了{}, 里面的原理是一样的,换汤不换药.

总结:
简单的for循环 都可以用推导式进行完成,性能高比较高,但是如果场景过于复杂就不要用,可读
性要排在第一位.

谢谢浏览,有好的建议请评论 ,谢谢

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/207858
推荐阅读
相关标签
  

闽ICP备14008679号