[关闭]
@songying 2018-07-12T17:08:02.000000Z 字数 1122 阅读 1431

列表,集合,字典推导式

python高级特性


列表推导

参考:Python 高级编程之列表推导式
《流畅的python》2.2

列表推导式主要由两部分组成:

  • 循环变量表达式( x**2)
  • for循环头部 ( for x in L)
  1. 公式: list_out = [ expression for x in List]
  2. L = [ x ** 2 for x in L ]
  3. 等价于:
  4. for i in range(len(L)):
  5. L[i] = L[i] ** 2

使用列表推导的原则:只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。

列表推导、生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,在 Python 3 中都有了自己的局部作用域,就像函数似的。表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。

列表推导工作原理

Python在执行列表推导式时,会对可迭代对象 L 进行迭代,将每一次迭代的值赋给循环变量 x ,然后收集变量表达式 x ** 2 的计算结果,最终由这些结果构成了新的列表,也就是列表推导式所返回的值。

只要支持 for 循环进行迭代的对象,都可以对它使用列表推导式。如字符串,元组等

列表推导 + if语句

只要支持 for 循环进行迭代的对象,都可以对它使用列表推导式。

if 语句用于过滤掉那些不满足条件的结果项。

  1. [ expression for x in L if expression]
  2. L = [x**2 for x in L if x % 2 != 0]

列表推导 + for嵌套

在复杂一点的列表推导式中,可以嵌套有多个 for 语句。按照从左至右的顺序,分别是外层循环到内层循环。

  1. [ expression for x in X
  2. for y in Y
  3. ...
  4. for n in N ]
  5. L = [x + y for x in 'ab' for y in 'jk']

列表推导 + if + for

if语句可选

  1. [ expression for x in X if condition
  2. for y in Y if condition
  3. ...
  4. for n in N if condition ]

列表推导式生成矩阵

  1. M = [[x, x+1, x+2] for x in [1, 4, 7]]

集合推导式

集合推导式的语法与列表推导式相同,只需要把外面的方括号改成花括号即可。

  1. set = {x ** 2 for x in [1, 2, 2]} # 生成一个集合

字典推导式

字典推导式的外面也是使用花括号,不过花括号的内部需要包含键值两部分。

  1. D = {'a':1, 'b':2, 'c':3}
  2. D = {value: key for key, value in D.items()} # 生成一个字典
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注