原文链接: Python代码小片段
上一篇: Ubuntu 常见软件 安装
下一篇: js 闭包 深入
写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还是很有意思的。改天兴致来了再发点吧~~~