根据列表内各元素个数进行列表切片分类的简单处理方法

本文介绍了一种将一维数据按照特定规则进行切片并重新组织的方法。通过统计和计数,实现了将step列表中的元素按其出现次数进行分组,并相应地对value列表进行相同分组,最终得到了有序的子列表集合。

1、待处理数据情况

step = [1,1,1,2,2,2,2,2,3,3,3,4,4,4,5,5,6,6,6,7,8,8,9,9,9]

value = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y]

tips:step与value一一对应但不是数组或矩阵的关系

2、目的

目的是将step内的数据按各元素个数进行切片,形成单独的列表,如下所示:

step_list=[[1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5], [6, 6, 6], [7], [8, 8], [9, 9, 9]]

value_list=[['a', 'b', 'c'], ['d', 'e', 'f', 'g', 'h'], ['i', 'j', 'k'], ['l', 'm', 'n'], ['o', 'p'], ['q', 'r', 's'], ['t'], ['u', 'v'], ['w', 'x', 'y']]

下面的输出也就容易实现

step1=[1,1,1] value1=[a,b,c] num = 3

step2=[2,2,2,2,2] value2=[d,e,f,g,h] num = 5

...

step9=[9,9,9] value = [w,x,y] num = 3

3、代码

import numpy as np
from collections import Counter
step = [1,1,1,2,2,2,2,2,3,3,3,4,4,4,5,5,6,6,6,7,8,8,9,9,9]
value = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y]
obj_coun = Counter(step).most_common() # 对列表step内元素进行统计
beternum = np.unique(step)
benter_list = beternum.tolist()
obj_num = [] # 点数量列表
dir = {}  # 将counter类型转换成字典(没找到直接进行转换的方法所以只能一个一个遍历提取了T。T)
dir1 ={}  # 用于储存排好序的轨迹数
step_list = []
value_list = []
for i in range(len(benter_list)):
    dir["%s"%obj_coun[i][0]] = obj_coun[i][1]
for k in sorted(dir):
    dir1[k] = dir[k]
for key in dir1.keys():
    obj_num.append(dir1[key])
# 进行切片
for i in range(len(benter_list)):
    step_list.append(step[sum(obj_num[0:i]):sum(obj_num[0:i+1])])
for i in range(len(benter_list)):
    value_list.append(value[sum(obj_num[0:i]):sum(obj_num[0:i+1])])
print("step_list=",step_list)
print("value_list=",value_list)

4、结果展示

step_list= [[1, 1, 1], [2, 2, 2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5], [6, 6, 6], [7], [8, 8], [9, 9, 9]]
value_list= [['a', 'b', 'c'], ['d', 'e', 'f', 'g', 'h'], ['i', 'j', 'k'], ['l', 'm', 'n'], ['o', 'p'], ['q', 'r', 's'], ['t'], ['u', 'v'], ['w', 'x', 'y']]

在网上找了很多资料也没找到合适的方法,就自己试着编写了一下,从满足使用需求上来说对我而言已经够用了,但是还有很多不成熟的地方,比如代码还比较冗余等等。

但是,未来可期,加油呀少年!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值