→ day831231:不用迴圈的話 遞迴可以嗎~ 05/09 00:07
收到! XDDD
# def f(L, N=set()): # it's bad
def f(L, N=None):
# print L,f.N
if N is None:
N = set()
if not L:
return []
elif L[0] in N:
return f(L[1:],N)
elif L[0] in L[1:]:
return f(L[1:],N|{L[0]})
else:
return [L[0]]+f(L[1:],N)
if __name__=='__main__':
A = [9,5,5,4,7,6,4,1,2,0,10,9,7]
print f(A)
# [6, 1, 2, 0, 10]
--
當然是完全沒有增進效率....
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.27.47
※ 文章網址: http://www.ptt.cc/bbs/Python/M.1399823296.A.D3C.html
※ 編輯: apua (140.113.27.47), 05/11/2014 23:49:22
※ 編輯: apua (140.113.27.47), 05/11/2014 23:54:02
推 ccwang002:apua 太猛了! 05/12 02:24
※ 編輯: apua (140.113.136.219), 05/12/2014 11:10:39
→ apua:本來用了 f.N 的方式, 因為會改變狀態, 作法很差, 所以改掉 05/12 11:11
推 ya790206:def f(L, N=set()): 的 N=set() 不是很好的寫法 05/12 21:25
謝謝提醒, 已修改~
※ 編輯: apua (140.113.200.180), 05/13/2014 23:37:02
推 amozartea:這根本就把集合論學透了才想得到這招 05/15 20:38