@songying
2018-07-12T17:08:02.000000Z
字数 1122
阅读 1431
python高级特性
参考:Python 高级编程之列表推导式
《流畅的python》2.2
列表推导式主要由两部分组成:
- 循环变量表达式( x**2)
- for循环头部 ( for x in L)
公式: list_out = [ expression for x in List]
L = [ x ** 2 for x in L ]
等价于:
for i in range(len(L)):
L[i] = L[i] ** 2
使用列表推导的原则:只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,你可能就要考虑是不是得用 for 循环重写了。
列表推导、生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,在 Python 3 中都有了自己的局部作用域,就像函数似的。表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们。
Python在执行列表推导式时,会对可迭代对象
L
进行迭代,将每一次迭代的值赋给循环变量x
,然后收集变量表达式x ** 2
的计算结果,最终由这些结果构成了新的列表,也就是列表推导式所返回的值。只要支持
for
循环进行迭代的对象,都可以对它使用列表推导式。如字符串,元组等
只要支持
for
循环进行迭代的对象,都可以对它使用列表推导式。
if
语句用于过滤掉那些不满足条件的结果项。
[ expression for x in L if expression]
L = [x**2 for x in L if x % 2 != 0]
在复杂一点的列表推导式中,可以嵌套有多个
for
语句。按照从左至右的顺序,分别是外层循环到内层循环。
[ expression for x in X
for y in Y
...
for n in N ]
L = [x + y for x in 'ab' for y in 'jk']
if语句可选
[ expression for x in X if condition
for y in Y if condition
...
for n in N if condition ]
M = [[x, x+1, x+2] for x in [1, 4, 7]]
集合推导式的语法与列表推导式相同,只需要把外面的方括号改成花括号即可。
set = {x ** 2 for x in [1, 2, 2]} # 生成一个集合
字典推导式的外面也是使用花括号,不过花括号的内部需要包含键值两部分。
D = {'a':1, 'b':2, 'c':3}
D = {value: key for key, value in D.items()} # 生成一个字典