每天早晨洗一遍脑子特并清醒
List: all_equal
功能实现: 检验一个列表中的所有元素是否都一样1
2
3
4
5
6
7
8
9
10
11def 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 FalseList: all_unique
功能实现: 如果列表所有值都是唯一的,返回True, 否则返回False解读: 在给定列表上使用集合set()去重, 比较它和原列表的长度
1
2
3
4
5
6
7
8
9
10
11
12def 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 FalseList: bifucate
功能实现: 将列表值分组。如果filter的元素是True, 那么对应的元素属于第一个组,否则属于第二个组
解读: 使用列表推导式和enumerate()基于fiter元素到各组1
2
3
4
5
6
7
8def 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']]List: difference
功能实现: 返回两个iterables间的差异
解读: 创建b的集合,使用a的列表推导式保留不在_b中的元素1
2
3
4
5
6
7def 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]Math: digitize
功能实现: 将一个数分解转换为个位数字
解读: 将n字符化后使用map()函数结合int完成转化1
2
3
4
5def digitize(n):
return list(map(int, str(n)))
print(digitize(123))
# [1,2,3]List: shuffle
功能实现: 将列表元素顺序随机打乱
解读: 使用Fisher-Yates算法重新排序列表元素1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from 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]Math: clamp_number
功能实现: 将数字num嵌在由a和b边界值规定的范围中
解读: 如果num落尽范围内,返回num 否则,返回范围内最接近的数字1
2
3
4
5
6
7
8def 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 -1String: byte_size
功能实现: 返回字符串的字节数
解读: 使用String.encode(‘utf-8’) 解码给定字符串, 返回长度1
2
3
4
5def byte_size(string):
return len(string.encode('utf-8'))
# print(byte_size('😀')) # 4
# print(byte_size('Hello World')) # 11Math: gcd
功能实现: 计算几个数的最大公因数
解读: 使用reduce()和math.gcd在给定列表上实现1
2
3
4
5
6
7from functools import reduce
import math
def gcd(numbers):
return reduce(math.gcd, numbers)
print(gcd([8, 36, 28])) # 4