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

看板Python作者 (sariel)時間10年前 (2014/05/08 14:43), 編輯推噓8(8025)
留言33則, 11人參與, 最新討論串1/5 (看更多)
我想要請問一下,如果我有一串數字 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 想請問有沒有更好的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.126.36.171 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1399531426.A.04C.html

05/08 14:45, , 1F
不好意思,補一下,應該是說能盡量減少使用for迴圈的
05/08 14:45, 1F

05/08 14:46, , 2F
方法,而非完全不用(當然能完全不用最好)
05/08 14:46, 2F

05/08 15:03, , 3F
[item for item in A if A.count(item)==1]
05/08 15:03, 3F

05/08 15:04, , 4F
from collections import Counter
05/08 15:04, 4F

05/08 15:04, , 5F
L = Counter(A)
05/08 15:04, 5F

05/08 15:04, , 6F
print filter(lambda k:L[k]==1, L.keys())
05/08 15:04, 6F

05/08 19:16, , 7F
B = sorted(A)
05/08 19:16, 7F

05/08 19:16, , 8F
tuple(map(int,
05/08 19:16, 8F

05/08 19:17, , 9F
filter(None,
05/08 19:17, 9F

05/08 19:17, , 10F
map(str.__mul__,
05/08 19:17, 10F

05/08 19:17, , 11F
map(str,
05/08 19:17, 11F

05/08 19:17, , 12F
B),
05/08 19:17, 12F

05/08 19:17, , 13F
map(bool,
05/08 19:17, 13F

05/08 19:17, , 14F
map(int.__mul__,
05/08 19:17, 14F

05/08 19:17, , 15F
map(int.__sub__,
05/08 19:17, 15F

05/08 19:18, , 16F
B[1:]+[B[-1]+1],
05/08 19:18, 16F

05/08 19:18, , 17F
B),
05/08 19:18, 17F

05/08 19:18, , 18F
map(int.__sub__,
05/08 19:18, 18F

05/08 19:18, , 19F
B,
05/08 19:18, 19F

05/08 19:18, , 20F
[B[0]-1]+B[:-1])))))))
05/08 19:18, 20F

05/08 21:56, , 21F
不太可能不用for,就算沒有用for,函式內部也會用for
05/08 21:56, 21F

05/08 21:57, , 22F
b={}, for I in a, if not b.get(I,None)
05/08 21:57, 22F

05/08 21:59, , 23F
b[I]=1 else b[i]+=1
05/08 21:59, 23F

05/08 22:00, , 24F
這樣只有一個for, 跟樓上用collections差不多
05/08 22:00, 24F

05/08 22:02, , 25F
[i for i in set(A) if A.count(i)==1] 常重複的話較快
05/08 22:02, 25F

05/08 22:17, , 26F
A中每個數字至少都得被讀過一次,複雜度至少是 O(n)
05/08 22:17, 26F

05/09 00:07, , 27F
不用迴圈的話 遞迴可以嗎~
05/09 00:07, 27F

05/09 10:37, , 28F
不用 for 的理由是什麼?光是 set(A) 也是 O(n) 啊
05/09 10:37, 28F

05/10 14:42, , 29F
在建list時 順便建dict紀錄出現次數?
05/10 14:42, 29F

05/11 17:17, , 30F
推文排版也太克難了吧~真辛苦了...可以貼codepad阿!!!
05/11 17:17, 30F

05/11 22:50, , 31F
Python for loop 跟底層直譯器實作的 for 速度有落差
05/11 22:50, 31F

05/11 22:50, , 32F
所以想找避免使用 Python for loop 得更快解法是合理的~
05/11 22:50, 32F

05/12 02:06, , 33F
我覺得若真要計較到 for loop 實作速度的話,寫C比較快..
05/12 02:06, 33F
文章代碼(AID): #1JQoUY1C (Python)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 5 篇):
文章代碼(AID): #1JQoUY1C (Python)