推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,简化代码,速度快等优点。推导式包括:
1.列表推导式
2.字典推导式
3.集合推导式
4.嵌套列表推导式
注意: 字典和集合推导是最近才加入到Python的(Python 2.7 和Python 3.1以上版). 下面简要介绍下:

第一:列表推导式

  列表推导式也叫列表解析式。
  功能:是提供一种方便的列表创建方法,只用一条简洁的表达式即可对得到的元素进行转换变形,所以,列表解析式返回的是一个列表
  格式:用中括号括起来,中间用for语句,后面跟if语句用作判读,满足条件的传到for语句前面用作构建先的列表

  其基本格式如下:

    [expr for value in collection ifcondition]

  过滤条件可有可无,取决于实际应用,只留下表达式;相当于下面这段for循环:   

  result = []
  for value in collection:
   if condition:
  result.append(expression)

  例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母   

  >>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
  >>> [name.upper() for name in names if len(name)>3]
  ['ALICE', 'JERRY', 'WENDY', 'SMITH']

  例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

  >>> [(x,y) for x in range(5) if x%2==0 for y in range(5) if y %2==1]
  [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]

  例3:  求M中3,6,9组成的列表

  >>> M = [[1,2,3],
  ... [4,5,6],
  ... [7,8,9]]
  >>> M
  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  >>> [row[2] for row in M]
  [3, 6, 9]   #或者用下面的方式
  >>> [M[row][2] for row in (0,1,2)]
  [3, 6, 9]

  例4:  求M中斜线1,5,9组成的列表 

  >>> M
  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  >>> [M[i][i] for i in range(len(M))]
  [1, 5, 9]

  例5:  求M,N中矩阵和元素的乘积

  >>> M = [[1,2,3],
  ... [4,5,6],
  ... [7,8,9]]
  >>> N = [[2,2,2],
  ... [3,3,3],
  ... [4,4,4]]
    >>> [M[row][col]*N[row][col] for row in range(3) for col in range(3)]
  [2, 4, 6, 12, 15, 18, 28, 32, 36]
  >>> [[M[row][col]*N[row][col] for col in range(3)] for row in range(3)]
  [[2, 4, 6], [12, 15, 18], [28, 32, 36]]
  >>> [[M[row][col]*N[row][col] for row in range(3)] for col in range(3)]
  [[2, 12, 28], [4, 15, 32], [6, 18, 36]]

  例5:  讲字典中age键,按照条件赋新值

  

  >>> bob
  {'pay': 3000, 'job': 'dev', 'age': 42, 'name': 'Bob Smith'}
  >>> sue
  {'pay': 4000, 'job': 'hdw', 'age': 45, 'name': 'Sue Jones'}
  >>> people = [bob, sue]
  >>> [rec['age']+100 if rec['age'] >= 45 else rec['age'] for rec in people] # 注意for位置
  [42, 145]

第二:字典推导式

  字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。其基本格式如下:

    { key_expr: value_expr for value in collection if condition }

  例1:  用字典推导式以字符串以及其长度建字典

  >>> strings = ['import','is','with','if','file','exception']
  >>> D = {key: val for val,key in enumerate(strings)}
  >>> D
  {'exception': 5, 'is': 1, 'file': 4, 'import': 0, 'with': 2, 'if': 3}

  例2:  大小写key合并

    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
for k in mcase.keys()
if k.lower() in ['a','b']
}
print mcase_frequency
# Output: {'a': 17, 'b': 34}

  例3.快速更换key和value

  mcase = {'a': 10, 'b': 34}
  mcase_frequency = {v: k for k, v in mcase.items()}
  print mcase_frequency
  # Output: {10: 'a', 34: 'b'}

第三:集合推导式

  集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]。其基本格式如下:

  { expr for value in collection if condition }

  例1:  用集合推导建字符串长度的集合

  >>> strings = ['a','is','with','if','file','exception']
  >>> {len(s) for s in strings} #有长度相同的会只留一个,这在实际上也非常有用
  set([1, 2, 4, 9])

第四:嵌套列表推导式

  嵌套列表是指列表中嵌套列表,比如说: 
  >>> L = [[1,2,3],
   [4,5,6],
   [7,8,9]]

   例1: 一个由男人列表和女人列表组成的嵌套列表,取出姓名中带有两个以上字母e的姓名,组成列表

      names = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],
  ['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]

  用for循环实现:

  tmp = []
  for lst in names:
  for name in lst:
  if name.count('e') >= 2:
  tmp.append(name)   print tmp
  #输出结果
  >>>
  ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

  用嵌套列表实现:

  >>> names = [['Tom','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],
  ['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]
  >>> [name for lst in names for name in lst if name.count('e')>=2] #注意遍历顺序,这是实现的关键
  ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

  

本文链接:http://www.cnblogs.com/xuchunlin/p/6059707.html

python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解的更多相关文章

  1. 27.Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

    本章将会介绍 Python 内置的四种常用数据结构:列表(list).元组(tuple).字典(dict)以及集合(set). 这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因 ...

  2. Python代码阅读(第11篇):展开嵌套列表

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现了展开嵌套列表的功能,将一个嵌套的list展开成一个一维list(不改变原有列表的顺序). 本篇阅读的代 ...

  3. PYTHON压平嵌套列表

    list 是 Python 中使用最频繁的数据类型, 标准库里面有丰富的函数可以使用.不过,如果把多维列表转换成一维列表(不知道这种需求多不多),还真不容易找到好用的函数,要知道Ruby.Mathem ...

  4. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  5. Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)

    Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...

  6. python嵌套列表知多少

    今天在创建嵌套列表时遇到一个问题,决定看看到底是谁在背后捣鬼 >>> board1 = [[0]*3 for _ in range(3)] [[0, 0, 0], [0, 0, 0] ...

  7. 【python】Leetcode每日一题-扁平化嵌套列表迭代器

    [python]Leetcode每日一题-扁平化嵌套列表迭代器 [题目描述] 给你一个嵌套的整型列表.请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数. 列表中的每一项或者为一个整数,或者是另 ...

  8. python 用嵌套列表做矩阵加法

    写一个函数,接收两个由嵌套列表模拟成的矩阵,返回一个嵌套列表作为计算结果,要求运行效果如下: >>> matrix1 = [[1, 1], [-3, 4]] >>> ...

  9. Python中关于列表嵌套列表的处理

    在处理列表的时候我们经常会遇到列表中嵌套列表的结构,如果我们要把所有元素放入一个新列表,或者要计算所有元素的个数的话应该怎么做呢? 第一个例子 对于上图中的这样一组数据,如果我们要知道这个CSV文件中 ...

随机推荐

  1. cocos2dx游戏存储举例及其注意事项

    今天白白跟大家分享一下cocos2dx中游戏的存储及需要注意的事项 cocos2dx中自带了存储类:CCUserDefault ,倘若需要存储的数据量教大的话,建议使用数据库来存储 现在先给大家看一下 ...

  2. [置顶] Spring中自定义属性编辑器

    Spring中的属性编辑器能够自动的将String类型转化成需要的类型,例如一个类里面的一个整型属性,在配置文件中我们是通过String类型的数字进行配置的,这个过程中就需要一个转化操作,当然这个转化 ...

  3. ftp-ftp权限

    在服务器上创建ftp站点时勾选的是读写权限对所有的用户开放,但是发现有些用户还是只能读取不能写入,后来发现是因为ftp指向的文件夹本身的权限没有打开导致的,解决办法是,设置ftp指向的文件夹的权限为u ...

  4. dubbo+maven多模块项目单元测试

    基本上就是记录各种报错的解决办法.基本上就是将散落在项目各个模块中的配置文件复制到测试模块中. 目录结构: ——src ——java ——test ——java ——DaoTest.java ——re ...

  5. Angular路由与Nodejs路由的区别

    转自:http://www.imooc.com/qadetail/114683?t=148182 觉得angualr.js的路由是针对于单页面的路由,每次路由发生变化,只是页面的状态发生变化,页面本身 ...

  6. MySQL 的实时性能监控利器

    操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,io ...

  7. 【pyhon】理想论坛爬虫1.08

    #------------------------------------------------------------------------------------ # 理想论坛爬虫1.08,用 ...

  8. MVC的Filter应用小结

    一.概念定义 Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller). Filter用途广泛:(1)判断登录与否或用户权限:(2)决策输出缓 ...

  9. w3cschool菜鸟教程离线版chm手册正式发布

    w3cschool菜鸟教程是一个提供了最全的的web技术基础教程网站.网站包含了HTML教程.CSS教程.Javascript教程.PHP教程等各种建站基础教程.同时也提供了大量的在线实例,通过实例, ...

  10. 栈的实现实例(C语言)

    /* stack.h */ #ifndef _stack_h #define _stack_h struct stack_record; typedef struct stack_record *st ...