这段代码大概长这样。
# 这里有两个列表,每个列表有一些元素
s1 = []
s2 = []
# 这里有个函数,做了些什么
def func(a, b):
if b in s1 and a not in s1:
return b
if a in s1:
return a
if b in s2 and a not in s2:
return b
return a
复制代码
是不是大家也觉得这个代码有问题。
直觉上感觉这里的if
可以简化下,但不知道怎么简化。想到最近刚学了点概率论,这里好像可以用一下。
先定义四个事件
A = {a in s1}
B = {b in s1}
C = {第一个return return b
}
D = {第二个return return a
}
然后,将上面的代码转成数学表达式
b in s1 and a not in s1
=>
a in s1
=>
那么
这样就很清晰了,当A发生时,返回a;当A不发生且B发生时,返回b。
于是前两个if
可以优化为
if a in s1:
return a
if b in s1:
return b
复制代码
按照这个方法,可以把代码优化成这样
def func(a, b):
if a in s1:
return a
if b in s1:
return b
if a in s2:
return a
if b in s2:
return b
return a
复制代码
逻辑和之前完全一致,但是代码清晰了很多。
从这个例子中,我品尝到数学的快乐,坚定了我继续学下去的信念。