在python3中实现查找数组中最接近与某值的元素操作

 更新时间:2020年02月29日 16:07:05   作者:笔筒188  
今天小编就为大家分享一篇在python3中实现查找数组中最接近与某值的元素操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,直接上代码吧!

import datetime
 
def find_close(arr, e):
 start_time = datetime.datetime.now()
 
 size = len(arr)
 idx = 0
 val = abs(e - arr[idx])
 
 for i in range(1, size):
  val1 = abs(e - arr[i])
  if val1 < val:
   idx = i
   val = val1
 
 use_time = datetime.datetime.now() - start_time
 
 return arr[idx], use_time.seconds * 1000 + use_time.microseconds / 1000
 
def find_close_fast(arr, e):
 start_time = datetime.datetime.now()
  
 low = 0
 high = len(arr) - 1
 idx = -1
 
 while low <= high:
  mid = int((low + high) / 2)
  if e == arr[mid] or mid == low:
   idx = mid
   break
  elif e > arr[mid]:
   low = mid
  elif e < arr[mid]:
   high = mid
 
 if idx + 1 < len(arr) and abs(e - arr[idx]) > abs(e - arr[idx + 1]):
  idx += 1
  
 use_time = datetime.datetime.now() - start_time
 
 return arr[idx], use_time.seconds * 1000 + use_time.microseconds / 1000
 
if __name__ == "__main__":
 arr = []
 
 f = open("1Mints.txt")
 for line in f:
  arr.append(int(line))
 f.close()
 
 arr.sort()
 
 while 1:
  e = int(input("input a number:"))
  print("find_close ", find_close(arr, e))
  print ("find_close_fast ", find_close_fast(arr, e))

补充拓展:查询集合中最接近某个数的数

查询集合中最接近某个数的数

/*
★实验任务
给你一个集合,一开始是个空集,有如下两种操作:

向集合中插入一个元素。
询问集合中最接近某个数的数是多少。
★数据输入
输入第一行为一个正整数 N,表示共有 N 个操作。
接下来 N 行,每行一个操作。
对于第一个操作,输入格式为 1 x,表示往集合里插入一个值为 x 的元素。
对于第二个操作,输入格式为 2 x,表示询问集合中最接近 x 的元素是什么。
1<=N<=100000,1<=x<=1000000000。

★数据输出
对于所有的第二个操作,输出一个或者两个整数,表示最接近 x 的元素,有
两个数的情况,按照升序输出,并用一个空格隔开。
如果集合为空,输出一行“Empty!”
数据保证插入的元素两两不同。

输入示例 输出示例

5 Empty!
2 1 2
1 2 2 4
2 3
1 4
2 3
*/

解题思路

一、采用C++ 中map容器,因为它可以实时对输入的元素进行排序。(map的使用可自行百度)

二、当集合为空时,输出“Empty!”;当集合中只有一个元素时,直接输出该元素。

三、下面重点看一般的情况。

1.先查找集合中是否有查询的元素,有则输出该元素

2.没有的话,将该元素先插入集合中,再查找该元素处于集合的某个位置。

若该元素在集合的首位,则输出该数的下一位。

若该元素在集合的末位,则输出该数的上一位。

否则,判断它左右元素的值与它的差的绝对值,输出差的绝对值较小的那个元素。若相等,则同时输出。

#include <iostream>
#include <map>
#include <cmath> 
using namespace std;
map <long long ,int> a;
int main()
{
	a.clear() ;
	int N,t;
	long long int x;
	cin >> N;
	while(N--)
	{
		cin >> t >> x;
		if(t==1)
			a[x]=1;
		else
		{
			if(a.empty() )//判断集合是否为空 
				cout << "Empty!\n" ;
			else
			{
				if(a.size() == 1 )//若只有一个元素,则直接输出 
					cout << a.begin()->first << endl;
				else
				{
					map <long long ,int>::iterator it,m,n;
					it=a.find(x);
					if(it!=a.end() )
					{
						cout << x <<endl;
						continue;
					}
					a[x]=1;
					it=a.find(x);
					if(it == a.begin() )
					{
						it++;
						cout << it -> first << endl;
					} 
					else if(it == a.end() )
					{
						it--;
						cout << it -> first << endl; 
					}
					else
					{
						m=--it;//m和n分别指向it的左右两侧 
						it++;
						n=++it;
						if(abs(m -> first - x) > abs(n -> first - x))
							cout << n -> first << endl;
						else if(abs(m -> first - x) == abs(n -> first - x))	
							cout << m -> first << " " << n -> first << endl;
						else
							cout << m -> first << endl;		
					}
					a.erase(a.find(x) ); 	
				}	 
			}	
		}	
	}
	return 0;
}

以上这篇在python3中实现查找数组中最接近与某值的元素操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python用Pillow(PIL)进行简单的图像操作方法

    Python用Pillow(PIL)进行简单的图像操作方法

    下面小编就为大家带来一篇Python用Pillow(PIL)进行简单的图像操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Python解决“argument after * must be an iterable”报错问题

    Python解决“argument after * must be an iterable”报错问题

    这篇文章主要介绍了Python解决“argument after * must be an iterable”报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 教你使用Python实现一个简易版Web服务器

    教你使用Python实现一个简易版Web服务器

    这篇文章主要介绍了教你使用Python实现一个简易版Web服务器,本篇文章将通过实现一个简易版的Web服务器,帮助读者理解Python网络编程的基本概念和技巧,需要的朋友可以参考下
    2023-04-04
  • Python设计模式之单例模式实例

    Python设计模式之单例模式实例

    这篇文章主要介绍了设计模式中的单例模式Python实例,需要的朋友可以参考下
    2014-04-04
  • Python实现压缩pdf文件大小

    Python实现压缩pdf文件大小

    工作中常需要压缩数据文件大小,压缩PDF文件是一种减少PDF文件大小的方法,这样可以使文件更易于传输和存储,本文将使用Python实现这一功能,需要的可以参考下
    2024-02-02
  • Python获取B站粉丝数的示例代码

    Python获取B站粉丝数的示例代码

    这篇文章主要介绍了Python获取B站粉丝数的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python闭包执行时值的传递方式实例分析

    Python闭包执行时值的传递方式实例分析

    这篇文章主要介绍了Python闭包执行时值的传递方式,结合实例形式分析了Python闭包执行时的传值原理与实现方式,代码中包含了较为详尽的注释便于理解,需要的朋友可以参考下
    2018-06-06
  • python sklearn中tsne算法降维结果不一致问题的解决方法

    python sklearn中tsne算法降维结果不一致问题的解决方法

    最近在做一个文本聚类的分析,在对文本数据embedding后,想着看下数据的分布,于是用sklearn的TSNE算法来降维embedding后的数据结果,当在多次执行后,竟发现TSNE的结果竟然变了,而且每次都不一样,所以本文就给大家讲讲如何解决sklearn中tsne算法降维结果不一致的问题
    2023-10-10
  • opencv中图像叠加/图像融合/按位操作的实现

    opencv中图像叠加/图像融合/按位操作的实现

    这篇文章主要介绍了opencv中图像叠加/图像融合/按位操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python内置函数anext的具体使用

    python内置函数anext的具体使用

    本文主要介绍了python内置函数anext的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论