幾個Python代碼片段

寫Python寫得興頭上,獻上幾個我常用的Python代碼小片段,一般人我不告訴他...[doge]

  • 矩陣轉置

除了用NumPy,通常使用大可不必殺雞用牛刀。可以用列表解析:

A = [[1, 2, 3, 4], [5, 6, 7, 8]][[r[c] for r in A] for c in range(len(A[0]))]# output: [[1, 5], [2, 6], [3, 7], [4, 8]]

吶,也可以這樣:

trans_mat = lambda A: map(list, zip(*A))list(trans_mat(A))# output: [[1, 5], [2, 6], [3, 7], [4, 8]]

  • 字典的Key與Value對調

m = {"A": 1, "B": 2, "C": 3}invert_map_key_value = lambda m: dict(zip(m.values(), m.keys()))invert_map_key_value(m)# output: {1: "A", 2: "B", 3: "C"}

  • 剔除分隔符

剔除分隔符通常用split

"".join("A|B|C|D|E|F|G".split("|"))# output: "ABCDEFG"

我更喜歡用itertools.islice,因為可以節選字元串:

import itertools"".join(itertools.islice("A|B|C|D|E|F|G", 6, None, 2))# output: "DEFG""".join(itertools.islice("A|B|C|D|E|F|G", 0, None, 2))# output: ""ABCDEFG"

  • 捋平列表

這個是終極版的捋平列表方法,支持任意層次的捋平,或全部捋平。

lst = [1, 2, [3, 4], [[5, 6], [8, 9, [19, 29, 39], 900], 10], 10, [8], 11, 12, 13, [14, 15]]flatten = (lambda lst, lv=None: [elem2 for elem1 in lst for elem2 in flatten(elem1, lv if lv is None else lv-1)] if type(lst) is list and (lambda lv: 0 if lv is None else lv)(lv) >= 0 else [lst])flatten(lst)# output: [1, 2, 3, 4, 5, 6, 8, 9, 19, 29, 39, 900, 10, 10, 8, 11, 12, 13, 14, 15]flatten(lst, 1)# output: [1, 2, 3, 4, [5, 6], [8, 9, [19, 29, 39], 900], 10, 10, 8, 11, 12, 13, 14, 15]flatten(lst, 2)# output: [1, 2, 3, 4, 5, 6, 8, 9, [19, 29, 39], 900, 10, 10, 8, 11, 12, 13, 14, 15]flatten(lst, 3)# output: [1, 2, 3, 4, 5, 6, 8, 9, 19, 29, 39, 900, 10, 10, 8, 11, 12, 13, 14, 15]

寫Python還是很有意思的。改天興緻來了再發點吧~~~

推薦閱讀:

計算機專業職業規劃?應該選擇開發、測試還是技術支持作為第一份工作
為什麼軟體要發布 BETA 版,不直接發布正式版呢?
如何將「軟體工程」課程中所學的東西,付諸實踐?

TAG:Python | 编程 | 软件开发 |