使用单个iterable生成两个不同的列表推导

时间:2017-08-27 08:29:03

标签: python refactoring

为获得矩阵的主要和次要对角线,我可以使用:

major, minor = list(
    map(list, zip(*([(row[i], row[-i - 1]) for i, row in enumerate(mat)]))))

但是,是否存在更好的(pythonic)方式来选择列表推导中的项目,以便我以后不必转置它?

也可以扩展到创建更多列表(例如,列表中intstringsfloats的3个单独列表?

1 个答案:

答案 0 :(得分:0)

确实没有必要花费这么长的时间来使用一个列表理解。与使用两个单独的列表推导相比,它的可读性更低,维护更难,而且没有更快

Task

是的,major = [row[i] for i, row in enumerate(mat)] minor = [row[-i] for i, row in enumerate(mat, 1)] 技巧可用于从元组列表中提取任意数量的元素,只需在元组中生成更多元素。但是,该技术不应该被使用。