我想要请问一下,如果我有一串数字
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
想请问有没有更好的方法?
不好意思,补一下,应该是说能尽量减少使用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())
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])))))))
不太可能不用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)
不用 for 的理由是什么?光是 set(A) 也是 O(n) 啊
作者:
lairrol (小黑)
2014-05-11 17:17:00推文排版也太克难了吧~真辛苦了...可以贴codepad阿!!!
作者:
apua (Apua)
2014-05-11 22:50:00Python for loop 跟底层直译器实作的 for 速度有落差所以想找避免使用 Python for loop 得更快解法是合理的~
我觉得若真要计较到 for loop 实作速度的话,写C比较快..