[问题]不用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