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

作者: sariel0322 (sariel)   2014-05-08 14:43:43
我想要請問一下,如果我有一串數字
A = [9,5,5,4,7,6,4,1,2,0,10,9,7,....]
要如何找出這列資料中只出現一次的數字,但不用到for迴圈的方法
我只能想到說:
B = []
C = []
dataset = set(A)
for i in dataset:
B.append(i)
for i in B:
for j in A:
if i == j:
C.append(i)
if len(C) == 1:
print C
想請問有沒有更好的方法?
作者: sariel0322 (sariel)   2014-05-08 14:45:00
不好意思,補一下,應該是說能盡量減少使用for迴圈的方法,而非完全不用(當然能完全不用最好)
作者: Seudo (進擊的三笠)   2014-05-08 15:03:00
[item for item in A if A.count(item)==1]
作者: LiloHuang (十年一刻)   2014-05-08 15:04:00
from collections import CounterL = Counter(A)print filter(lambda k:L[k]==1, L.keys())
作者: mikapauli (桜花)   2014-05-08 19:16:00
B = sorted(A)tuple(map(int,filter(None,map(str.__mul__,map(str,B),map(bool,map(int.__mul__,map(int.__sub__,B[1:]+[B[-1]+1],B),map(int.__sub__,B,[B[0]-1]+B[:-1])))))))
作者: funnypeter (很難笑,披得)   2014-05-08 21:56:00
不太可能不用for,就算沒有用for,函式內部也會用forb={}, for I in a, if not b.get(I,None)b[I]=1 else b[i]+=1這樣只有一個for, 跟樓上用collections差不多
作者: ck574b027 (荒圍!定厝!賊!妹!)   2014-05-08 22:02:00
[i for i in set(A) if A.count(i)==1] 常重複的話較快
作者: LiloHuang (十年一刻)   2014-05-08 22:17:00
A中每個數字至少都得被讀過一次,複雜度至少是 O(n)
作者: day831231 (下個地點)   2014-05-09 00:07:00
不用迴圈的話 遞迴可以嗎~
作者: darkgerm (黑駿)   2014-05-09 10:37:00
不用 for 的理由是什麼?光是 set(A) 也是 O(n) 啊
作者: z101924512   2014-05-10 14:42:00
在建list時 順便建dict紀錄出現次數?
作者: lairrol (小黑)   2014-05-11 17:17:00
推文排版也太克難了吧~真辛苦了...可以貼codepad阿!!!
作者: apua (Apua)   2014-05-11 22:50:00
Python for loop 跟底層直譯器實作的 for 速度有落差所以想找避免使用 Python for loop 得更快解法是合理的~
作者: darkgerm (黑駿)   2014-05-12 02:06:00
我覺得若真要計較到 for loop 實作速度的話,寫C比較快..

Links booklink

Contact Us: admin [ a t ] ucptt.com