二維矩陣轉置

1
2
3
4
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[row[col] for row in a] for col in range(len(a[0]))] # 方法一
list(map(list,zip(*a))) # 方法二
# 結果都是:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

解析方法一:python

  a的矩陣形態是3*3,即3行*3列, len(a[0]) 即取矩陣a的列的長度,用於轉置後做爲長的長度;內部再用row[col] 將矩陣的i行j列的數據放置在j行i列;markdown

 

解析方法二:函數

  以前一直不多去用zip和map函數,根據方法二,補充下關於zip和map兩個區別於Python2時期直接返回值,在Python3中返回生成器的兩個內置方法。post

zip函數:

    zip函數接受任意多個可迭代對象做爲參數,將對象中對應的元素打包成一個tuple,而後返回一個可迭代的zip對象。spa

    這個可迭代對象能夠使用循環的方式列出其元素。code

    若多個可迭代對象的長度不一致,則所返回的列表與長度最短的可迭代對象相同。對象

 用法1:用兩個列表生成一個zip對象

 例1blog

>>> a1=[1,2,3]
>>> a2=[4,5,6]
>>> a3=[7,8,9]
>>> a4=["a","b","c","d"]
>>> zip1=zip(a1,a2,a3)
>>> print(zip1)
<zip object at 0x7f5a22651c08>
>>> for i in zip1:
...     print(i)
... 
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

  

例2ip

>>> zip2=zip(a1,a2,a4)
>>> print(zip2)
<zip object at 0x7f5a22651d48>
>>> for j in zip2:
...     print(j)
... 
(1, 4, 'a')
(2, 5, 'b')
(3, 6, 'c')

  

例3it

>>> zip3=zip(a4)
>>> print(zip3)
<zip object at 0x7f5a22651d08>
>>> for i in zip3:
...     print(i)
... 
('a',)
('b',)
('c',)
('d',)

  

例4

>>> zip4=zip(*a4 *3)
>>> 
>>> print(zip4)
<zip object at 0x7f5a22651f08>
>>> for j in zip4:
...     print(j)
... 
('a', 'b', 'c', 'd', 'a', 'b', 'c', 'd', 'a', 'b', 'c', 'd')

  

 

用法2:二維矩陣變換(矩陣的行列互換)

>>> l1=[[1,2,3],[4,5,6],[7,8,9]]
>>> print([[j[i] for j in l1] for i in range(len(l1[0])) ])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
>>> zip(*l1)
<zip object at 0x7f5a22651f88>
>>> for i in zip(*l1):
...     print(i)
... 
(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

 

map函數:

    map(function,iterable,...) 

    map函數接收的第一個參數爲一個函數,能夠爲系統函數例如float,或者def定義的函數,或者lambda定義的函數都可。

    舉一個例子,下面這個例子在Python2.7下是能夠正常顯示的:

ls = [1,2,3]
rs = map(str,ls)
# 打印結果
['1','2','3']

lt = [1,2,3,4,5,6]
def add(num):
    return num + 1

rs  = map(add, lt)
print rs
# [2,3,4,5,6,7]

 

    可是在Python3下咱們輸入: 

>>> ls = [1,2,3]
>>> rs = map(str,ls)
>>> print(rs)
<map object at 0x10d161898>

 而不是咱們想要的結果,這也是Python3下發生的一些新的變化,若是咱們想獲得須要的結果須要這樣寫:

ls=[1,2,3]
rs=map(str,ls)
print(list(rs))

 

 這樣顯示的結果即爲咱們想要看到的。

相關文章
相關標籤/搜索