python - 如何使用python中的列表推导计算列表中元素的出现次数?
问题描述
给定一个像这样的列表
arr = [1, 1, 2, 2, 2, 3, 3]
我想计算每个元素的出现次数并将其存储在一个新列表中,但使用这样的列表理解:
occ = [arr.count(e) for e in arr]
但这会打印出原始数据array: [1, 1, 2, 2, 2, 3, 3]
,而不是[2, 3, 2]
输入数组中 1、2 和 3 的出现次数。
为什么会发生这种情况以及如何解决?
注意:如果可能,必须使用列表推导。
解决方案
好吧,原因是当你这样做的时候
arr = [1, 1, 2, 2, 2, 3, 3]
和 arr.count(1) ,您将获得列表 arr 中数字 1 的出现次数。然后当你这样做时
occ = [arr.count(e) for e in arr]
您实际上是在计算 arr.count(1) 2 次,然后是 arr.count(3) 3 次,然后是 arr.count(3) 2 次。
所以,为了不重复数字,你必须做的是计算列表中的唯一数字,它们只是 1、2 和 3。所以正确的代码是:
occ = [arr.count(e) for e in set(arr)]
现在,当您打印列表时,您将按预期获得 [2,3,2] 。
推荐阅读
- ignite - 是否可以在 Ignite 中的多值字段上创建索引?
- ssh - Ansible - AWX (Tower) - 如何正确设置基于 SSH 密钥的连接
- python - jupyter notebook 上的 TensorFlow 看不到我的 GPU
- mysql - 尝试在 Windows 上执行 docker-compose 文件但出现错误我的绑定挂载配置不正确
- javascript - 使用Javascript中的正则表达式检查数组中的所有元素是否作为单词存在于字符串中
- java - 如何在 Java 的 DecimalFormat 中使用添加点到货币?
- kotlin - Kotlin 序列化:如何序列化 MutableStateFlow
? - c# - 如果存在行,如何更新行,否则将其添加到数据库中?[实体框架]
- node.js - 如何在sequelize中设置外键
- google-bigquery - 在 MySql 中获取聚合数据