D.X*_*X.D 7 python list python-3.x
这是我到目前为止:
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))
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现list.count()的时间复杂度是O(n),因此,这段代码将是O(n ^ 2).
有没有办法将其减少到O(nlogn)?
the*_*eye 11
你可以Counter像这样使用
from collections import Counter
alist=[1,1,1,2,2,3,4,2,2,3,2,2,1]
print Counter(alist)
Run Code Online (Sandbox Code Playgroud)
如果您想使用您的解决方案,您可以像这样改进它
def icount(alist):
adic = {}
for i in alist:
adic[i] = adic.get(i, 0) + 1
return adic
Run Code Online (Sandbox Code Playgroud)
更好的是,你可以defaultdict像这样使用
from collections import defaultdict
adic = defaultdict(int)
for i in alist:
adic[i] += 1
return adic
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望在此处查看不同Python对象上的各种操作的时间复杂度
柜台是你的帮手:
>>> 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
Run Code Online (Sandbox Code Playgroud)
通过此方法轻松获取每个元素的计数
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |