這段代碼大概長這樣。python
# 這裏有兩個列表,每一個列表有一些元素
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
能夠簡化下,但不知道怎麼簡化。想到最近剛學了點機率論,這裏好像能夠用一下。優化
先定義四個事件spa
A = {a in s1}.net
B = {b in s1}code
C = {第一個return return b
}cdn
D = {第二個return return a
}blog
而後,將上面的代碼轉成數學表達式事件
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
複製代碼
邏輯和以前徹底一致,可是代碼清晰了不少。
從這個例子中,我品嚐到數學的快樂,堅決了我繼續學下去的信念。