Effective Python 读书笔记: 8 不要使用含有两个以上表达式的列表推导

# -*- 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() 

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/88603130