用python 求一个数组中最大的三个元素及其所在位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python 求一个数组中最大的三个元素及其所在位置相关的知识,希望对你有一定的参考价值。
其实问题原型为:
a=11,b=2,c=145,d=19,e=90,f=34,g=9
求最大的三个值。要求返回的不是数字,而是a,b,c,d,e,f,g中被赋最大三个值的字母。
要求用Python来写。
谢谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FindMaxWithIndex
/// <summary>
/// 有一个数组,每个元素的值都是实数,请写出求最大元素的值及其位置的算法
/// </summary>
class Program
static void Main(string[] args)
double[] Num = new[] -8, 4543.9, 4543.9, 3, 45, 654.7, 7, 66, 35, 45, 4, 6, 4543.9, 5, 46, 54, 6, 43, 5.980, 34, 4543.9 ;
//double[] Num = new [] 1.0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ;
int[] index = SearchMaxWithIndex(Num);
Console.WriteLine("The max number is: 0", Num[index[0]]);
Console.Write("The index of max number is:");
for (int i = 0; i < index.Length; i++)
if (index[i] == -1) break;
Console.Write(" \'0\'", index[i]);
Console.ReadKey();
private static int[] SearchMaxWithIndex(double[] arr)
int[] pos = new int[arr.Length]; //记录最大值所在位置的数组
int position = 0; //初始设定数组的第1个元素为最大值
int j = 1;//j指示位置数组pos的下标
for (int i = 1; i < arr.Length; i++)
if (arr[i] > arr[position])
position = i; //记下新的最大值的位置
j = 1; //位置数组pos的下标恢复为1,下标为0的位置为position预留
else if (arr[i] == arr[position])
pos[j++] = i; //记下重复最大值的位置
pos[0] = position; //位置数组pos的下标为0的位置为position预留
if (j < arr.Length) pos[j] = -1; //-1为标识值,表示位置数组pos下标为0, 1, 2…(j-1)的位置存放的是最大值所在的位置
return pos;
参考技术A #!/usr/bin/env python
a = [('a', 11), ('b', 2), ('c', 145), ('d', 19), ('e', 90), ('f', 34), ('g', 9)]
a.sort(key = lambda x: x[1], reverse = True)
for i in range(3):
print(a[i][0])追问
for 循环:
(某些运算)
计算a-g的值
比较a-g的大小,输出被赋最大三个值的字母。
每次循环都要计算一次a-g的值,然后比较大小。
这种情况下怎么生成“a = [('a', 11), ('b', 2), ('c', 145), ('d', 19), ('e', 90), ('f', 34), ('g', 9)]“这样的矩阵?
谢谢
哦,我知道怎么办了。
谢谢~
```python
import numpy as np
# 定义一个数组
arr = np.array([14, 25, 3, 16, 25, 11, 37, 17])
# 使用argsort函数获取数组的升序排列索引
arr_sort_idx = arr.argsort()
# 获取数组中最大的3个元素的索引
max_idx = arr_sort_idx[-3:]
# 输出最大的三个元素及其所在位置
print("数组中最大的三个元素为:", arr[max_idx])
print("最大的三个元素所在位置为:", max_idx)
```
这样,就可以通过Python的numpy库以及内置函数,轻松地求取一个数组中最大的三个元素及其所在位置了。 参考技术C 可以使用Python中的字典和sorted函数来解决这个问题。具体实现如下:
values = 'a': 11, 'b': 2, 'c': 145, 'd': 19, 'e': 90, 'f': 34, 'g': 9
# 对字典按照值进行排序
sorted_values = sorted(values.items(), key=lambda x: x[1], reverse=True)
# 取出前三个键
result = [x[0] for x in sorted_values[:3]]
print(result) # 输出 ['c', 'e', 'd']
首先,将字母和对应的值存储在一个字典中。然后,使用sorted函数对字典按照值进行排序,将结果存储在一个元组列表中。最后,取出排序后前三个元素的键,即为最大的三个值对应的字母列表。 参考技术D 你可以使用 Python 中的字典来实现这个功能,将每个字母作为键,对应的数字作为值进行存储。然后,使用 Python 内置的 `sorted` 函数按照值进行排序,取最大的三个值并输出它们所对应的键即可。
以下是一个示例代码:
```python
# 定义输入数组
a = 11
b = 2
c = 145
d = 19
e = 90
f = 34
g = 9
# 将字母和对应的数字存储到字典中
d = 'a': a, 'b': b, 'c': c, 'd': d, 'e': e, 'f': f, 'g': g
# 按照值进行排序,返回包含键值对的元组的列表
sorted_dict = sorted(d.items(), key=lambda x: x[1], reverse=True)
# 输出前三个键值对
for i in range(3):
print(sorted_dict[i])
```
运行上述代码会输出最大的三个值及其所在位置,结果如下:
```
('c', 145)
('e', 90)
('f', 34)
```
其中,第一个元素表示键,第二个元素表示值,按照值从大到小排列。因此,最大的三个值分别为 145、90 和 34,对应的字母分别为 c、e 和 f。
分治理法求数组最大值
如今给出一个n个元素的书组,元素个数n。须要求出最大最小值.
方法1.
用max,min。分别记录数组最大最小值,顺序扫描数组,不断替换更新max。min,(max,min的初始值都为数组中的第一个元素)
方法2.
1.假设数组中仅仅有一个元素。那么它是最大也是最小值
2.否则数组中多于一个数。则能够求出左边的最大最小值,右边的最大最小值.然后该区间的最大值是max(lmax,rmax),最小值是min(lmin,rmin)
详细例如以下(n个数字由随机生成).
#include <stdio.h> #include <time.h> int getmax(int a,int b){ return a>b?a:b; } int getmin(int a,int b){ return a<b?以下是几次执行的结果.a:b; } void print(int a[],int n){ int i; for(i=0;i<20;i++) printf("%d ",a[i]); printf("\n"); } void maxmin(int a[],int l,int r,int * _max,int * _min){ if(r>l){ int m=(l+r)/2; int _lmin,_rmin,_lmax,_rmax; maxmin(a,l,m,&_lmax,&_lmin); maxmin(a,m+1,r,&_rmax,&_rmin); *_max=getmax(_lmax,_rmax); *_min=getmin(_lmin,_rmin); }else{ *_max=*_min=a[l]; } } int creat(int a[],int n,int m){ int i; srand(time(NULL)); for(i=0;i<n;i++) a[i]=rand()%m-m/2; return n; } int main(){ int n,i; int a[100]; int _min,_max; creat(a,20,100); print(a,20); maxmin(a,0,19,&_max,&_min); printf("max:%d min:%d\n",_max,_min); return 0; }
以上是关于用python 求一个数组中最大的三个元素及其所在位置的主要内容,如果未能解决你的问题,请参考以下文章
编写一个函数findmax( ),求数组中最大元素及其下标。调用该函数求整型数组a中的最大元素及其下标。