python小技巧

每天早晨洗一遍脑子特并清醒

  1. List: all_equal
    功能实现: 检验一个列表中的所有元素是否都一样

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def all_equal(lst):
    return lst[1:] == lst[:-1]

    ret = all_equal([1, 2, 3, 4, 5, 6])

    ret2 = all_equal([1, 1, 1, 1])

    print(ret, ret2)


    # True False
  2. List: all_unique
    功能实现: 如果列表所有值都是唯一的,返回True, 否则返回False

    解读: 在给定列表上使用集合set()去重, 比较它和原列表的长度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def all_unique(lst):
    return len(lst) == len(set(lst))

    # 举例:
    x = [1, 2, 3, 4, 5, 6]
    y = [1, 2, 2, 3, 4, 5]
    z = all_unique(x)
    b = all_unique(y)
    print(z, b)


    # True False
  3. List: bifucate
    功能实现: 将列表值分组。如果filter的元素是True, 那么对应的元素属于第一个组,否则属于第二个组
    解读: 使用列表推导式和enumerate()基于fiter元素到各组

    1
    2
    3
    4
    5
    6
    7
    8
    def bifurcate(lst, filter):
    return [
    [x for i, x in enumerate(lst) if filter[i] == True],
    [x for i, x in enumerate(lst) if filter[i] == False]
    ]

    r = bifurcate(["beep", "boop", "foo", "bar"], [True, True, False, True])
    # [['beep', 'boop', 'bar'], ['foo']]
  4. List: difference
    功能实现: 返回两个iterables间的差异
    解读: 创建b的集合,使用a的列表推导式保留不在_b中的元素

    1
    2
    3
    4
    5
    6
    7
    def difference(a, b):
    _b = set(b)
    return [item for item in a if item not in _b]

    print(difference([1, 2, 3], [1, 2, 4]))

    # [3]
  5. Math: digitize
    功能实现: 将一个数分解转换为个位数字
    解读: 将n字符化后使用map()函数结合int完成转化

    1
    2
    3
    4
    5
    def digitize(n):
    return list(map(int, str(n)))

    print(digitize(123))
    # [1,2,3]
  6. List: shuffle
    功能实现: 将列表元素顺序随机打乱
    解读: 使用Fisher-Yates算法重新排序列表元素

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from copy import deepcopy
    from random import randint

    def shuffle(lst):
    temp_lst = deepcopy(lst)
    m = len(temp_lst)
    while (m):
    m -= 1
    i = randint(0, m)
    temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]
    return temp_lst

    foo = [1, 2, 3]
    print(shuffle(foo))

    # [2, 1, 3]
  7. Math: clamp_number
    功能实现: 将数字num嵌在由a和b边界值规定的范围中
    解读: 如果num落尽范围内,返回num 否则,返回范围内最接近的数字

    1
    2
    3
    4
    5
    6
    7
    8
    def clamp_number(num, a, b):
    return max(min(num, max(a, b)), min(a, b))

    a = clamp_number(2, 3, 5)
    b = clamp_number(1, -1, -5)
    print(a, b)

    # 3 -1
  8. String: byte_size
    功能实现: 返回字符串的字节数
    解读: 使用String.encode(‘utf-8’) 解码给定字符串, 返回长度

    1
    2
    3
    4
    5
    def byte_size(string):
    return len(string.encode('utf-8'))

    # print(byte_size('😀')) # 4
    # print(byte_size('Hello World')) # 11
  9. Math: gcd
    功能实现: 计算几个数的最大公因数
    解读: 使用reduce()和math.gcd在给定列表上实现

    1
    2
    3
    4
    5
    6
    7
    from functools import reduce
    import math

    def gcd(numbers):
    return reduce(math.gcd, numbers)

    print(gcd([8, 36, 28])) # 4

本文标题:python小技巧

文章作者:shuke

发布时间:2020年04月29日 - 08:04

最后更新:2020年04月29日 - 08:04

原始链接:https://shuke163.github.io/2020/04/29/python%E5%B0%8F%E6%8A%80%E5%B7%A7/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:python小技巧

文章作者:shuke

发布时间:2020年04月29日 - 08:04

最后更新:2020年04月29日 - 08:04

原始链接:https://shuke163.github.io/2020/04/29/python%E5%B0%8F%E6%8A%80%E5%B7%A7/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%