python查找数组中出现次数最多的元素
方法1-np.argmax(np.bincount())
看一个例子
array = [0,1,2,2,3,4,4,4,5,6]
print(np.bincount(array))
print(np.argmax(np.bincount(array))) #[1 1 2 1 3 1 1]
#
这里用到了两个函数,np.argmax和np.bincount,第一个很常见,就是返回数组中最大值对应的下标,np.bincount可以通过上面的例子理解:首先找到数组最大值max,然后返回0~max的各个数字出现的次数,在上例中,0出现了1次,1出现了1次,2出现了2次...以此类推。
为什么这两个函数合起来可以找到出现次数最多的元素呢?因为np.bincount返回的数组中的下标对应的就是原数组的元素值,如上例中np.argmax找到np.bincount返回的数组中的最大值3(原数组中4出现了3次),其对应的下标4正是原数组中的元素4,如此就可以找到数组中出现次数最多的元素。
但是这种方法有一个缺陷,即bincount只能统计0~max出现的次数,所以这种方法仅适用于非负数组
方法2-Counter().most_common(1)[0][0]
看一个例子
from collections import Counter
array = [0,1,2,2,3,4,4,4,5,6]
print(Counter(array))
print(Counter(array).most_common(1)[0][0]) #Counter({4: 3, 2: 2, 0: 1, 1: 1, 3: 1, 5: 1, 6: 1})
#
Counter用来对数组中元素出现次数进行统计,然后通过most_common函数找到出现次数最多的元素。这种方法对于数组就没有过多限制,甚至是各种类型元素混合的数组也可以
from collections import Counter
array = [0,1,2,2,3,4,4,4,5,6,'aswd']
print(Counter(array))
print(Counter(array).most_common(1)[0][0]) #Counter({4: 3, 2: 2, 0: 1, 1: 1, 3: 1, 5: 1, 6: 1, 'aswd': 1})
#
关于most_common函数可以通过下面的例子加深理解:

方法三
自己数各个元素出现的次数然后找到出现次数最多的元素
appear_times = {}
for label in [1,1,2,3,4,5,5,5]:
if label in appear_times:
appear_times[label] += 1
else:
appear_times[label] = 1
most_common = max(appear_times, key=lambda x: appear_times[x])
print(appear_times)
print(most_common)
#{1: 2, 2: 1, 3: 1, 4: 1, 5: 3}
#
这里需要注意的是appear_times是一个列表,用max求最大值默认情况返回value值(出现次数)最大的key值(元素),而不是value值,这里max函数中的参数key(和前面说的key不是一个东西)是指定寻找最大值的方式,在我们这个问题这里其实不需要这个参数,不过为了便于理解我还是写上了,对max函数key参数更深入的理解可以参考下面的例子:
print(max('ahecsc', 'bfsacg', 'aaaaaz', key=lambda x: x[0]))
print(max('ahecsc', 'bfsacg', 'aaaaaz', key=lambda x: x[3]))
print(max('ahecsc', 'bfsacg', 'aaaaaz', key=lambda x: x[5]))
#bfsacg
#ahecsc
#aaaaaz
同样的数据,key参数不同,结果不同,第一种情况是以数据的第一个位置元素的大小关系排序,并返回排序结果最大的数据('b'>'a'>'a',返回'b'所在的'bfsacg');第二种情况类似('c'>'a'>'a',返回'c'所在的'ahecsc');第三种情况('z'>'g'>'c',返回'z'所在的'aaaaaz')
目前我只知道这三种方法,如果有大佬知道更多好用的办法,欢迎留言
python查找数组中出现次数最多的元素的更多相关文章
- LINQ 获取当前数组中出现次数最多的元素
LINQ 获取当前数组中出现次数最多的元素 1 List<string> a = new List<string>(); a.Add( ...
- Java实现找出数组中重复次数最多的元素以及个数
/**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[ ...
- JS查找字符串中出现次数最多的字符
本文给大家带来两种js中查找字符串中出现次数最多的字符,在这两种方法中小编推荐使用第二种,对js查找字符串出现次数的相关知识感兴趣的朋友一起看看吧 在一个字符串中,如 'zhaochucichuz ...
- 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...
- 算法 数组中出现次数最多的数字 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?
使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...
- 【python cookbook】找出序列中出现次数最多的元素
问题 <Python Cookbook>中有这么一个问题,给定一个序列,找出该序列出现次数最多的元素.例如: words = [ 'look', 'into', 'my', 'eyes', ...
- php 获取某数组中出现次数最多的值(重复最多的值)与出现的次数
1.$arr = array(7,7,8,9,10,10,10); $arr = array_count_values($arr); // 统计数组中所有值出现的次数 arsort($arr); ...
- 【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素
问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # ...
随机推荐
- DB2的简单操作
转 最近在看db2,边读边写了一些,记下来,虽然写的乱七八糟.以备后用. 这些都写的很简单.我觉得也算是一些简单的操作吧,有些也是摘自别人的blog具体是引用哪的就不太记得了. 一.DB2两种注释写法 ...
- C++编程学习(十一) 指针和引用的区别
1.指针有自己的一块空间,而引用只是一个别名: 2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小: 3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用: ...
- [笔记]ul>li>a做分布时, 让其居中显示效果
结构: <div id="page"> <ul> <li><a href="#">首页</a>< ...
- 010.CI4框架CodeIgniter, autoload自动加载自己的helper函数类
01.自己定义了一个helper类,里面有个函数用来输出 02.定义一个Controller基本类,我们以后用到的Controllers类都继承自这个类.其中自动加载helper函数如图所示: 03. ...
- 009-PHP循环输出数组成员
<?php $Cities[] = "<B>北京</B>"; //等同于$Cities[0] = "北京" $Cities[] = ...
- log4j 功能说明
log4j 是一个非常强大的日志工具,应用于很多开源项目的.具体有以下几种功能: 定制不同输出的级别:ALL > TRACE > DEBUG > INFO > WARN > ...
- maven项目使用mybatis+mysql
1.添加依赖,在pom.xml中添加 <!--mybatis核心包--> <dependency> <groupId>org.mybatis</groupId ...
- #pragma命令详解
每种C和C++的实现支持对其宿主机或操作系统唯一的功能.例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式.#pragma指示使每个编译程序在保留C和C++语言的整体兼容 ...
- 指令——ls
Liunx基础命令 一.Liunx系统下的一般命令格式. 命令——实际上就是在Liunx终端中,在命令行中输入的内容. Liunx中一个命令的完整格式为: #指令主体(空格) [选项](空格) [操作 ...
- bzoj 1962: 模型王子
呵呵呵呵http://wenku.baidu.com/link?url=o0CPVzuBDLJMt0_7Qph1T7TtdFOzu7O-apIpvaWbIYMz8ZWqBneGqI8LGtLdqpuK ...