如何在Python中将一个列表映射到另一个列表?
['a','a','b','c','c','c']
到
[2, 2, 1, 3, 3, 3]
和
{'a': 2, 'c': 3, 'b': 1}
8 个回答
8
在Python 2.7及以上版本或者3.1及以上版本中,我们有一个内置的数据结构叫做collections.Counter,可以用来统计一个列表中的元素数量。
>>> l = ['a','a','b','c','c','c']
>>> Counter(l)
Counter({'c': 3, 'a': 2, 'b': 1})
之后我们可以很简单地构建出这样的列表[2, 2, 1, 3, 3, 3]
。
>>> c = _
>>> [c[i] for i in l] # or map(c.__getitem__, l)
[2, 2, 1, 3, 3, 3]
12
这段代码应该会得到这个结果:
from collections import defaultdict
myDict = defaultdict(int)
for x in mylist:
myDict[x] += 1
当然,如果你想要结果中的列表,只需要从字典中获取值(用 mydict.values())。
42
在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,特别是当我们刚开始学习编程的时候。为了帮助大家更好地理解这些问题,很多人会在网上提问,比如在StackOverflow上。
在这些讨论中,大家会分享自己的经验和解决方案。有时候,问题的答案可能会涉及一些技术细节,但我们可以通过简单的例子和解释来理解它们。这样,即使是编程小白也能慢慢掌握这些知识。
总之,编程的学习过程就是不断提问和寻找答案的过程。遇到问题时,不要害怕去询问,社区中的很多人都乐于助人,愿意分享他们的经验。
>>> 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}
>>>