作者apua (Apua)
看板Python
标题Re: [问题]不用for回圈寻找阵列中只出现过一次的资料
时间Sun May 11 23:48:13 2014
1F:→ 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://webptt.com/cn.aspx?n=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
2F:推 ccwang002:apua 太猛了! 05/12 02:24
※ 编辑: apua (140.113.136.219), 05/12/2014 11:10:39
3F:→ apua:本来用了 f.N 的方式, 因为会改变状态, 作法很差, 所以改掉 05/12 11:11
4F:推 ya790206:def f(L, N=set()): 的 N=set() 不是很好的写法 05/12 21:25
谢谢提醒, 已修改~
※ 编辑: apua (140.113.200.180), 05/13/2014 23:37:02
6F:推 amozartea:这根本就把集合论学透了才想得到这招 05/15 20:38