# -*- encoding: utf-8 -*-
import sys
'''
第8条: 不要使用含有两个以上表达式的列表推导
关键:
1 二层列表推导
样例:
result = [value for row in matrix for value in row]
注意: 二层列表推导,最前面的是外循环,第二层是内循环
2 列表推导支持多个if条件
处在同一个循环级别中的多项条件是and关系
列表推导支持多级循环,每一级循环支持多个条件
3 超过两个表达式的列表推导难以理解,需要避免,可改写为for循环形式
参考:
Effectiv Python 编写高质量Python代码的59个有效方法
'''
def flatMatrix(matrix):
result = [value for row in matrix for value in row]
'''
注意: 二层列表推导,最前面的是外循环,第二层是内循环
'''
return result
def squareMatrix(matrix):
result = [[value**2 for value in row] for row in matrix]
return result
def multipleCondition(arr):
result = [value for value in arr if value > 3 if value % 2 == 1]
return result
def multipleConditionInMatrix(matrix):
result = [[x for x in row if x % 3 == 0] for row in matrix if sum(row) >= 10]
return result
def process():
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
result = flatMatrix(matrix)
print result
result = squareMatrix(matrix)
print result
arr = [x for x in range(10)]
result = multipleCondition(arr)
print result
result = multipleConditionInMatrix(matrix)
print result
if __name__ == "__main__":
process()