Re: [問題]不用for迴圈尋找陣列中只出現過一次的資料

作者: apua (Apua)   2014-05-11 23:48:13
→ 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]
作者: day831231 (下個地點)   2014-05-09 00:07:00
不用迴圈的話 遞迴可以嗎~
作者: ccwang002 (亮)   2014-05-12 02:24:00
apua 太猛了!
作者: apua (Apua)   2014-05-12 11:11:00
本來用了 f.N 的方式, 因為會改變狀態, 作法很差, 所以改掉
作者: ya790206 (殘雲奪月)   2014-05-12 21:25:00
def f(L, N=set()): 的 N=set() 不是很好的寫法理由詳見http://goo.gl/aJWA0T
作者: amozartea (單車單)   2014-05-15 20:38:00
這根本就把集合論學透了才想得到這招

Links booklink

Contact Us: admin [ a t ] ucptt.com