当前位置: 首页 > 后端技术 > Python

Python代码阅读(第41篇):矩阵转置

时间:2023-03-26 19:14:49 Python

Python代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码本文阅读的代码实现了一个嵌套列表函数表示的矩阵的转置.本文阅读的代码片段来自30-seconds-of-python。transposedeftranspose(lst):returnlist(zip(*lst))#EXAMPLEStranspose([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])#[(1,4,7,10),(2,5,8,11),(3,6,9,12)]转置函数接收列表形式的矩阵并返回转置后的矩阵结果。转置函数的输入列表的元素也是一个列表,这些子列表的长度相同(每个子列表相当于矩阵的一行),组成一个矩阵。该函数使用zip接收这些子列表,然后同时迭代这些子列表(矩阵的行)。这些列表的每次迭代一次形成一个元组(相当于迭代矩阵的一列)。这些元组形成一个新的列表,这个列表的每个元素都是矩阵的一列。此时,原矩阵已经完成了转置操作。zip(*iterables)创建一个迭代器,该迭代器聚合来自每个可迭代对象的元素。它返回元组的迭代器,其中第i个元组包含来自每个参数序列或可迭代对象的第i个元素。当最短的输入迭代器耗尽时,迭代器停止迭代。当只有一个可迭代对象参数时,它返回一个单例迭代器。没有参数,它返回一个空迭代器。代码中zip(*lst)的入参形式*lst比较特殊。*解压列表lst,使每个元素同时作为参数传递给zip函数。>>>a=[1,2,3]>>>b=[-1,-2,-3]>>>temp1=zip(a,b)>>>temp2=zip(*[a,b])>>>temp3=zip([a,b])>>>list(temp1)[(1,-1),(2,-2),(3,-3)]>>>list(temp2)[(1,-1),(2,-2),(3,-3)]>>>list(temp3)[([1,2,3],),([-1,-2,-3],)]