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

本文是《Effective Python》一书的读书笔记,重点讨论了为何不应在列表推导式中使用两个以上的表达式,以及这样做的潜在问题和改进方案。
摘要由CSDN通过智能技术生成
# -*- 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() 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值