博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python推导:列表推导式、字典推导式、集合推导式,filter, map, reduce。
阅读量:6638 次
发布时间:2019-06-25

本文共 2153 字,大约阅读时间需要 7 分钟。

hot3.png

列表推导式

  • 例:整除3的数字  0-100
  • nums=[];num=[];for i in range(100):    if i%2==0:        nums.append(i);    else:        num.append(i);print(nums);print(num);n=[i for i in range(100) if i%3==0]print(n);
  • 调用函数
  • def squared(x):    return x*2;wq=[];q=[];for x in range(30):    if x%3==0:        wq.append(squared(x));q=[squared(y) for y in range(30) if y%3==0]print(wq);print(q);
  • 使用()生成generator
  • 将列表推导式的【】改成()即可得到生成器。--yeild
  • def squared(x):     return x*2;q=(squared(y) for y in range(30) if y%3==0);print(type(q));print(q);

字典推导式

  • 字典推导式和列表推导的使用方法是类似的,只不过中括号改成大括号
  • 例:快速更换key和value
  • mcase={'a':10,'b':34};for k,v in mcase.items():#items 可替换成keys和values,分别遍历键和值    print(k,v);mk={v:k for k,v in mcase.items()}print(mk);

集合推导式

  • 他们跟列表推导式也是类似的。唯一的区别在于它使用大括号{}
  • strings=['a','is','with','if','file','exception'];l={len(s) for s in strings};print(l);

练习:

  • 0-9的2次方
  • l=[i*i for i in range(10)];print(l);
  • 将单词长度大于3的转为大写输出
  • names = ['bob','tom','alice','jerry','wendy','smith']a=[name.upper() for name in names if len(name)>3]print(a);
  • 求(x,y)  其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表
  • b=[(x,y) for x in range(6)if x%2==0 for y in range(6)if y%2==1];print (b);
  • 求m中3,6,9组成的列表
  • m = [[1,2,3],[4,5,6],[7,8,9]]c=[row[2] for row in m];print(c);
  • 求m中斜线1,5,9组成的列表
  • m = [[1,2,3],[4,5,6],[7,8,9]];d=[m[i][i] for i in range(len(m))];print(d);
  • 求m,n中矩阵和元素的乘积
  • m = [[1,2,3],[4,5,6],[7,8,9]];n = [[2,2,2],[3,3,3],[4,4,4]]e=[m[i][j]*n[i][j]for i in range(len(m)) for j in range(len(m[i]))];print(e);
  • 如果两个元素之间不相等的话,结合两个列表的元素
  • m = [[1,2,3],[4,5,6],[7,8,9]];n = [[2,2,2],[4,4,4],[7,7,7]];L=[(m[i][j],n[i][j]) for i in range(3) for j in range(3)if m[i][j]!=n[i][j] ];print(L);

filter:

  • filter()函数包括两个参数,分别是function和list。该函数根据function参数返回的结果是否为真
  • 来过滤list参数中的项,最后返回一个新列表
  • 作用是对指定序列执行进行过滤操作
  • foo = [2, 18, 9, 22, 17, 24, 8, 12, 27];print(list(filter(lambda x:x%3==0,foo)));

map:

  • map函数会根据提供的函数对指定序列做映射。
  • 作用是以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的list。
  • foo = [2, 18, 9, 22, 17, 24, 8, 12, 27];print(list(map(lambda x: x * 2 + 10, foo)));

reduce:

  • reduce()函数会对参数序列中的元素进行累积计算。
  • import functools,_functoolsfoo = [1,2,3,4,5];print(functools.reduce(lambda x,y:x+y,foo));#计算过程是1+2+3+4+5=15

转载于:https://my.oschina.net/u/3764483/blog/1623349

你可能感兴趣的文章
【Vue.js 牛刀小试】06:第六章 - 按键修饰符的使用
查看>>
关于 JavaScript 原型和继承的思考
查看>>
ava只有按值调用,没有对象调用
查看>>
如何提高代码复用性,定义骨架?
查看>>
WWDC 2018:效率提升爆表的 Xcode 和 LLDB 调试技巧
查看>>
iOS - Swift 面向协议编程(一)
查看>>
iOS 轻松使用 App 数据统计
查看>>
算法知识梳理(10) - 二叉查找树
查看>>
K线与技术指标
查看>>
移动IM开发指南2:心跳指令详解
查看>>
一个合格的Webpack4配置工程师素养:第三部分
查看>>
pod下载不成功的问题
查看>>
十五、React Native StatusBar
查看>>
Android JNI 之 Bitmap 操作
查看>>
Practice - iOS 项目持续集成实践(一)
查看>>
大厂面试官:Java工程师的“十项全能”
查看>>
这些段子只有程序员才能看懂?
查看>>
iOS中你可能没有完全弄清楚的(一)synthesize
查看>>
对空数据页面等公共页面实现的一些思考
查看>>
《XML解析随记》
查看>>