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

separate and count emojis in python list

我想统计 python 列表中表情符号的出现次数。

假设我的列表是这样的
li = ['', '', '']

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

但我想获得 总数 个表情符号,也就是 {'': 3, '': 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, '': 2, '': 1})

@Dan 在我之前给出了一个不同的答案,后来他遗憾地删除了,所以我为 <10k 看不到它的用户复制它:

Counter("".join(li))

我认为它可能由于创建了连接字符串而效率较低,但我对多达 10 000 000 个项目的小型和大型列表进行了一些计时,看来他的解决方案始终是 30% 到 40%更快。

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

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