YOU*_*YOU 38

>>> x=['a','a','b','c','c','c']
>>> map(x.count,x)
[2, 2, 1, 3, 3, 3]
>>> dict(zip(x,map(x.count,x)))
{'a': 2, 'c': 3, 'b': 1}
>>>
Run Code Online (Sandbox Code Playgroud)

  • 没错——但你有没有意识到会发生什么,你遇到了 O(n^2) 陷阱?我经历过,当一个简单的算法完全杀死程序性能时,因为它碰巧是一个更大的数据集并且算法有这样的行为。 (3认同)
  • 放松.你最有可能一直在编写O(n ^ 3)和O(2 ^ n)算法,甚至从未注意到它们被执行.解决这些问题**如果**发生了. (3认同)
  • 结果看起来很漂亮,但它有潜在的O(n ^ 2)运行时行为. (2认同)
  • 但是他从来没有说过关于性能的任何内容......这解决了这个问题,如果它效率太低而不是需要解决的问题. (2认同)

Jue*_*gen 11

这个编码应该给出结果:

from collections import defaultdict

myDict = defaultdict(int)

for x in mylist:
  myDict[x] += 1
Run Code Online (Sandbox Code Playgroud)

当然,如果你想在结果之间输入列表,只需从dict(mydict.values())中获取值.


Miz*_*zor 6

使用a set只对每个项目进行一次计数,使用list方法count对它们进行计数,将它们存储在a中dict,并将项目作为键,并将出现值设置为值.

l=["a","a","b","c","c","c"]
d={}

for i in set(l):
    d[i] = l.count(i)

print d
Run Code Online (Sandbox Code Playgroud)

输出:

{'a': 2, 'c': 3, 'b': 1}
Run Code Online (Sandbox Code Playgroud)


luc*_*luc 5

a = ['a','a','b','c','c','c']
b = [a.count(x) for x in a]
c = dict(zip(a, b))
Run Code Online (Sandbox Code Playgroud)

我已经包含了 Wim 的答案。好想法


ken*_*ytm 5

在Python≥2.7或≥3.1上,我们有一个内置的数据结构集合.计数器来计算一个列表

>>> l = ['a','a','b','c','c','c']
>>> Counter(l)
Counter({'c': 3, 'a': 2, 'b': 1})
Run Code Online (Sandbox Code Playgroud)

[2, 2, 1, 3, 3, 3]之后很容易建立起来.

>>> c = _
>>> [c[i] for i in l]   # or map(c.__getitem__, l)
[2, 2, 1, 3, 3, 3]
Run Code Online (Sandbox Code Playgroud)