Python代码小片段

原文链接: 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还是很有意思的。改天兴致来了再发点吧~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值