本文主要介绍了Python实现矩阵倒排的方法,并结合实例形式更详细地分析了Python实现矩阵倒排的操作技巧。
deftrans(m ) :
a=[[] for i in m[0]]
for i in m:
forjinrange(Len ) I ) ) :
a[j].append(I[j] ) )。
返回a
m=[ 1,2 ]、[ 3,4 ]、[ 5,6 ] #请想象第一个列表是原始的,后面是添加在里面的
打印传输(m ) # result : [ 1,3,5 ],[ 2,4,6 ] ]
其实不用脑子的话,用双重循环很容易就能写出来:
但是,这个代码怎么看都很丑。
我仔细看了一下m这个结构。 等等,这不是词典iteritems () )的结果吗? 如果是dict(m ),结果——是keys ) )和values ) )吧。
所以,让我们用字典转换一下:
deftrans(m ) :
d=DICT(m ) )。
return [d.keys (,d.values ) ]
但是仔细想想,这里面有臭虫。 如果添加列表中的第一个元素相同,也就是转换后的dict的密钥相同,肯定不行。 而且,如果原始清单不是两个,而是多个的话,就不能使用词典了吧。 所以不要用这个方法,还是仔细看看名单的形状吧。
然后又是一个疏忽的发现:
这个倒排矩阵的即时感是怎么回事?
没错,这个问题的本质是求解倒排矩阵。
deftrans(m ) :
forIinrange(Len ) m ) ) :
forjinrange(I ) :
m[i][j],m[j][i]=m[j][i],m[i][j]
返回m
m=[ 1,2,3 ],[ 4,5,6 ],[ 7,8,9 ] ]
打印传输(m ) )。
其实有一点bug,看起来很好用,但是这个矩阵必须有相同的矩阵长度。
最后,小组的一位大神说:“如果只是将队伍转用的话,直接zip就可以了。 我想起来了,zip的本质就是这样的,取出列表中对应位置的元素,制定新的列表,就是这个主题要做的。
因此,最终,这个主题(倒排矩阵)的python解法相当奇怪:
deftrans(m ) :
返回zip (* m ) ) )。
是的。 就这么简单。 python的魅力。