在python列表中分离并计算表情符号

问题描述

我想计算python列表中Emojis的出现。

假设我的列表看起来像这样
li = ['?','??','???']

Counter(li)会给我{'?':1,'??':1,'???':1}

但是我想得到总数个表情符号,又名{'?':3,'?':2,2,'?':1}

我的主要问题是如何将大块连续表情符号分成单个列表项。我尝试用“ \ U”替换开头的“ \ U”,这样我就可以简单地用“”分割,但似乎不起作用。

非常感谢您的帮助:)

解决方法

您可以使用join将列表平整为单个字符串,然后将Counter应用于该字符串:

Counter("".join(li))

产生

Counter({'?': 3,'?': 2,'?': 1})

或者也许是一种内存效率更高的方法

counter = Counter()
for item in li:
    counter.update(item)
,

您可以通过迭代每个字符串的字符来计算表情符号:

from collections import Counter

li = ['?','??','???']

count = Counter(emoji for string in li for emoji in string)

print(count)
# Counter({'?': 3,'?': 1})

@Dan在我面前给出了一个不同的答案,此后他不幸地删除了该答案,因此我将其复制给

Counter("".join(li))

我认为,由于创建了连接字符串,效率可能较低,但是我做了一些计时,列出了从小到大的列表(最多1千万个项目),看来他的解决方案始终快30%到40%。

,

另一种方法是利用计数器实现加法的事实:

>>> li = ['?','???']
>>> from collections import Counter
>>> sum(map(Counter,li),Counter())
Counter({'?': 3,'?': 1})

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...