Python技巧彙總

2021-06-25 11:57:37 字數 2372 閱讀 6280

對矩陣進行行列變換,python**只需一行!看如下兩種方法,第一種使用巢狀的列表推導式(list comprehensions),第二種使用zip對matrix進行展開(unpacking)。

>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

>>> matrix

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

>>> transed = [[row[i] for row in matrix] for i in range(4)]

>>> transed

[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

>>>

>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

>>> matrix

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

>>> transed = zip(*matrix)

>>> transed

[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

注意:第二種方式,其中的元素從列表變為了元組。

通過定義乙個元組(tuple)或列表(list),甚至是字典(dictionary),可以通過展開變數,給函式傳遞多個引數,如下所示:

>>> def f(x, y, z):

print("x=%s"%(str(x)))

print("y=%s"%(str(y)))

print("z=%s"%(str(z)))

>>> args = (10, "test", [100, 200])

>>> f(*args)

x=10

y=test

z=[100, 200]

>>>

有時需要從列表 ["num0", "num1", "num2"] 構造類似 形式的字典,可利用enumerate內嵌函式完成,如下所示:

>>> d = 

>>> d

>>>

如果需要同時遍歷操作多個序列型別(str,list,tuple,unicode,bytes,buffer,xrange等),可以利用zip內嵌函式,如下所示:

>>> name = ["guido", "eric", "thomas"]

>>> age = [45, 34, 31]

>>> city = ["new york", "seattle", "beijing"]

>>> for n, a, c in zip(name, age, city):

print("%s is %d old, working at %s."%(n, a, c))

guido is 45 old, working at new york.

eric is 34 old, working at seattle.

thomas is 31 old, working at beijing.

>>>

對於像str,list,tuple等序列型別,可以利用切片反轉序列值,如下所示:

>>> s = "abcdefg"

>>> s

'abcdefg'

>>> s[::-1]

'gfedcba'

>>> l = ["a", "b", "c", "d"]

>>> l

['a', 'b', 'c', 'd']

>>> l[::-1]

['d', 'c', 'b', 'a']

>>> t = (1, 2, 3, 4,5)

>>> t

(1, 2, 3, 4, 5)

>>> t[::-1]

(5, 4, 3, 2, 1)

>>>

對於像"[4, [5, 6]]",""這樣字串形式的列表、字典形式,可以通過eval轉換成python的list和dict型別。這種場景主要用在使用者輸入或者從檔案中讀取。如下所示:

>>> strlist = "[4, [5, 6]]"

>>> strdict = ""

>>> eval(strlist)

[4, [5, 6]]

>>> eval(strdict)

>>>

當然,eval 很強大,對於處理字串和 python 內部資料型別之間的轉換,eval 和 str 配合使用就能達到效果。

電腦技巧彙總

千萬別買錯!記憶體的標壓和低壓大不同 win7設定設定啟動項 msconfig開啟設定介面 cleanmgr 開啟磁碟清理工具 compmgmt.msc 計算機管理 conf 啟動系統配置實用程式 charmap 啟動字元對映表 calc 啟動計算器 chkdsk.exe chkdsk磁碟檢查 cm...

WinForm技巧彙總

啟動不顯示窗體 在load事件中加入下列 注意不要在建構函式中使用,同時兩者的前後順序也要注意。visible false showintaskbar false 程式開機啟動 開機啟動項 是否啟動 啟動值的名稱 啟動程式的路徑 public static bool runwhenstart boo...

Linux技巧彙總

lsb release a lsb version base 4.0 amd64 base 4.0 noarch core 4.0 amd64 core 4.0 noarch distributor id centos description centos release 6.5 final rel...