python 对一组list数据,进行区间划分,按照大小排序并返回索引值

python 对一组list数据,进行区间划分,按照大小排序并返回索引值:


最近在对海洋数据进行处理时,对数据需要进行一些排序,数据匹配等操作;
现对我所希望实现的一些函数进行总结:

一、对一组纬度数据进行排序:

现有4000多个纬度数据,从第0个至最后一个从-90°~90°随机分布。

在这里插入图片描述

想要实现从-90°依次从到小排至90°,既升序排列,同时返回其下标
这里引用两个函数sorted 、enumerate
第一个函数:sorted 用法说明如下
list = sorted(iterable, key=None, reverse=False)
如果只想实现升序排列,直接进行如下操作即可

lat_sort=sorted(lat)

得到:
在这里插入图片描述但是我们想同时返回其在原来列表中的下标,既需要enumerate函数的帮忙
其使用方法如下:
enumerate(iterable, start=0)
Parameters:
Iterable: any object that supports iteration
Start: the index value from which the counter is
to be started, by default it is 0
我们先对lat数据直接进行使用看看返回了什么:

a=enumerate[lat]

在这里插入图片描述发现无法查看其具体结果,所以再将其转换为list格式,以便浏览

a=list(enumerate(lat))

在这里插入图片描述
很明显,上述操作,将每个原始lat中数据的值及其下标返回了,因此再次进行sorted排序是即可查看它对应的下标啦~

但是!!!,因为此时list中既有下标、又有数值,在进行排序时是按照下标还是数值呢,所以需要增加一个维度设定,既

对于sorted(iterable, key=None, reverse=False)中的key进行设定,使其按照所需纬度进行排序。

这里我需要的是根据数值排序,所以进行如下操作:

    
a=sorted(list(enumerate(lat)),key=lambda dimension: dimension[1])

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
补充一下:

lambda 函数是一种小的匿名函数,可接受任意数量的参数,但只能有一个表达式。
比如:对于想要传入的参数使其加上6,即可设置为:

x= lambda a : a + 10

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回到正题
我们运行上述代码会得到:
在这里插入图片描述果然!!!不出所料按照我们想要的结果实现啦~

下面,是提取对应的维度结果,比如我们想要将下标和数值分别放置在一个list中,只要这样即可:

index = [i[0] for i in a]
lat_sort = [i[1] for i in a]    
    

在这里插入图片描述
在这里插入图片描述
不出所料,是不是很easy呐!
如果想要按照原始lat中,不同数值按照不同颜色排列,只需将list转为array即可

lat_sort=np.array(lat_sort)    

在这里插入图片描述

二、将lat数据按照10为区间进行排序并统计每个区间存在的个数:

首先整理一下思路,我们要进行排序,然后区间进行分割。
这里引出一个新的函数:groupby(),其参数属性如下所示:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=, observed=False, dropna=True)
感兴趣的小伙伴们可以去点击下方中进行仔细浏览:

groupby参数引用

总之,我们可以通过groupby,达到分割数据的目的,
进行如下操作:

    
lat_sort=[]
for k, g in groupby(sorted(lat), key=lambda x:x//10):
     #x//10:对x取整除 - 返回商的整数部分
    print('{}-{}:{}'.format(k*10, (k+1)*10-1,len(list(g))))


在这里插入图片描述
完美!!!

		                            一个努力学习python的海洋小白
		                            水平有限,欢迎指正!!!
		                            欢迎评论、收藏。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值