这是我到目前为止所做的:
alist=[1,1,1,2,2,3,4,2,2,3,2,2,1]
def icount(alist):
adic={}
for i in alist:
adic[i]=alist.count(i)
return adic
print(icount(alist))
我做了一些研究,发现list.count()的时间复杂度是O(n),因此,这段代码将是O(n ^ 2)。
有没有办法将其减少到O(nlogn)?
答案 0 :(得分:11)
您可以像这样使用Counter
from collections import Counter
alist=[1,1,1,2,2,3,4,2,2,3,2,2,1]
print Counter(alist)
如果您想使用您的解决方案,可以像这样改进它
def icount(alist):
adic = {}
for i in alist:
adic[i] = adic.get(i, 0) + 1
return adic
更好的是,你可以像这样使用defaultdict
from collections import defaultdict
adic = defaultdict(int)
for i in alist:
adic[i] += 1
return adic
此外,您可能希望查看不同Python对象here上的各种操作的时间复杂度
答案 1 :(得分:6)
计数器是你的帮手:
>>> from collections import Counter
>>> a = [1,2,1,3,4]
>>> Counter(a)
Counter({1: 2, 2: 1, 3: 1, 4: 1})
>>> x = Counter(a)
>>> x[1]
2
>>> x[2]
1
通过此方法轻松获取每个元素的计数