Python 找出出现次数超过数组长度一半的元素实例


Posted in Python onMay 11, 2020

利用问题的普遍性和特殊性来求解,

代码如下:

import unittest
from datetime import datetime

class GetFreqNumbersFromList(unittest.TestCase):
 def setUp(self):
  print("\n")
  self.start_time = datetime.now()
  print(f"{self._testMethodName} start: {self.start_time}")

 def tearDown(self):
  self.end_time = datetime.now()
  print(f"{self._testMethodName} end: {self.end_time}")
  exec_time = (self.end_time - self.start_time).microseconds
  print(f"{self._testMethodName} exec_time: {exec_time}")

 def normal_solution(self, _list, _debug=False):
  """
  普遍性解法
  利用字典记录每个元素出现的次数——然后找出元素出现次数超过数组长度一半的元素
  普遍性解法针对任何次数的统计均适用而不光只是针对出现次数超过数组长度一半的情况
  """
  _target = len(_list) // 2
  _dict = {}
  for _member in _list:
   if _member not in _dict:
    _dict.setdefault(_member, 1)
   else:
    _dict[_member] += 1
  _ret = [_member for _member in _dict if _dict[_member] > _target]
  if _debug:
   print(_ret)
  return _ret

 def specific_solution(self, _list, _debug=False):
  """
  特殊性解法
  假设有两个元素出现的次数都超过数组长度一半就会得出两个元素出现的次数超出了数组长度的矛盾结果——所以超过数组长度一半的元素是唯一的
  排序后在数组中间的一定是目标解
  特殊性解法只能针对元素出现次数超过数组长度一半的情况
  """
  _list.sort()
  if _debug:
   print(_list[len(_list) // 2])
  return _list[len(_list) // 2]

 def test_normal_solution(self):
  actual_result = self.normal_solution([2,2,2,2,2,2,1,1,1,1,1], False)
  self.assertEqual(actual_result[0], 2)

 def test_specific_solution(self):
  actual_result = self.specific_solution([2,2,2,2,2,2,1,1,1,1,1], False)
  self.assertEqual(actual_result, 2)

if __name__ == "__main__":
 # 找出出现次数超过数组长度一半的元素
 suite = unittest.TestSuite()
 suite.addTest(GetFreqNumbersFromList('test_normal_solution'))
 suite.addTest(GetFreqNumbersFromList('test_specific_solution'))
 runner = unittest.TextTestRunner()
 runner.run(suite)

测试结果:

Python 找出出现次数超过数组长度一半的元素实例

补充知识:Python 用积分思想计算圆周率

早上起来突然想求圆周率,1单位时圆的面积。

代码如下:

from math import pow, sqrt

def calc_circle_s_with(r, dy, x_slices):
  x_from_start_to_cc = sqrt(1 - pow(dy, 2))
  dx = x_from_start_to_cc / x_slices
  x_to_edge = 1 - x_from_start_to_cc
  quarter_circle_s = 0
  while x_to_edge < 1:
    rect_s = dy * dx
    quarter_circle_s += rect_s
    x_to_edge = x_to_edge + dx
    dy = sqrt(1 - pow((1 - x_to_edge), 2))
  circle_s = 4 * quarter_circle_s
  print(circle_s)

calc_circle_s_with(1, 0.0001, 10000000)

运行结果接近3.1415926,dy传的越小,x_slices传的越大,就越接近。

半径为:1

初始小矩形到圆周的距离:1 - x_from_start_to_cc

其中dy代表四分之一圆中初始小矩形的高度,x_slices代表小矩形的宽度:(1 - x_from_start_to_cc) / x_slices

四分之一圆的面积积分为:quarter_circle_s

以上这篇Python 找出出现次数超过数组长度一半的元素实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python注释详解
Jun 01 Python
python list元素为tuple时的排序方法
Apr 18 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
Tensorflow实现在训练好的模型上进行测试
Jan 20 Python
pytorch数据预处理错误的解决
Feb 20 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
python如何从键盘获取输入实例
Jun 18 Python
记一次Django响应超慢的解决过程
Sep 17 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
用Python爬取某乎手机APP数据
Jun 15 Python
Pycharm如何导入python文件及解决报错问题
May 10 #Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 #Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 #Python
python对接ihuyi实现短信验证码发送
May 10 #Python
python调用API接口实现登陆短信验证
May 10 #Python
aws 通过boto3 python脚本打pach的实现方法
May 10 #Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 #Python
You might like
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
php实现图片添加水印功能
2014/02/13 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
node.js超时timeout详解
2014/11/26 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
python 除法保留两位小数点的方法
2018/07/16 Python
浅谈flask源码之请求过程
2018/07/26 Python
python关于调用函数外的变量实例
2019/12/26 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
巡警年度自我鉴定
2014/02/21 职场文书
食品业务员岗位职责
2014/03/18 职场文书
精神文明单位申报材料
2014/05/02 职场文书
个人委托函范文
2015/01/29 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
工作简报范文
2015/07/21 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python