如何在python中将一个列表映射到另一个列表?

如何在python中将一个列表映射到另一个列表?,python,Python,到 及 对于第一个: l=['a','a','b','c','c','c'] 地图(l.计数,l) 我已经包括了Wim的答案。好主意第二个主意可能就是 a = ['a','a','b','c','c','c'] b = [a.count(x) for x in a] c = dict(zip(a, b)) 此编码应给出以下结果: >>> x=['a','a','b','c','c','c'] >>> map(x.count,x) [2, 2, 1, 3, 3

对于第一个:

l=['a','a','b','c','c','c']

地图(l.计数,l)


我已经包括了Wim的答案。好主意

第二个主意可能就是

a = ['a','a','b','c','c','c']
b = [a.count(x) for x in a]
c = dict(zip(a, b))

此编码应给出以下结果:

>>> 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}
>>>

当然,如果您想要中间结果中的列表,只需从dict(mydict.values())中获取值。

使用
设置
仅对每个项目进行一次计数,使用列表方法
计数
对其进行计数,将其存储在
dict
中,并将项目作为键,出现值

d=defaultdict(int)
for i in list_to_be_counted: d[i]+=1
l = [d[i] for i in list_to_be_counted]
输出:

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

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

print d

关于Python≥2.7或≥3.1,我们有一个内置的数据结构来统计列表

{'a': 2, 'c': 3, 'b': 1}
之后很容易构建
[2,2,1,3,3]

>>> l = ['a','a','b','c','c','c']
>>> Counter(l)
Counter({'c': 3, 'a': 2, 'b': 1})

我不明白这个问题。至少添加一行描述会非常有帮助。上周每天都会问这个问题
c=dict(zip(a,b))
应该可以计算
c
+1太棒了!我已经更新了我的答案结果看起来不错,但是它有潜在的O(n^2)运行时行为。但是他从来没有说过任何关于性能的事情。。。这就解决了问题,如果效率太低,那是另一个需要解决的问题。没错——但是你有没有意识到会发生什么,你会遇到O(n^2)-陷阱?我经历过,一个简单的算法完全扼杀了程序的性能,因为它恰好是一个更大的数据集,而且算法有这样的行为。放松。您很可能一直在编写O(n^3)和O(2^n)算法,甚至从未注意到它们正在执行。如果出现这些问题,就解决它们。对我来说,这是最容易理解/实现的。您知道它是否比使用collections计数器慢吗?对于这些简单的示例,请同时实现它们并计时。别相信我的猜测。或者更确切地说,根本不在乎速度;您使用Python是为了简单,而不是性能。
from collections import defaultdict

myDict = defaultdict(int)

for x in mylist:
  myDict[x] += 1
d=defaultdict(int)
for i in list_to_be_counted: d[i]+=1
l = [d[i] for i in list_to_be_counted]
l=["a","a","b","c","c","c"]
d={}

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

print d
{'a': 2, 'c': 3, 'b': 1}
>>> l = ['a','a','b','c','c','c']
>>> Counter(l)
Counter({'c': 3, 'a': 2, 'b': 1})
>>> c = _
>>> [c[i] for i in l]   # or map(c.__getitem__, l)
[2, 2, 1, 3, 3, 3]