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']]
在网上找了很多资料也没找到合适的方法,就自己试着编写了一下,从满足使用需求上来说对我而言已经够用了,但是还有很多不成熟的地方,比如代码还比较冗余等等。
但是,未来可期,加油呀少年!
本文介绍了一种将一维数据按照特定规则进行切片并重新组织的方法。通过统计和计数,实现了将step列表中的元素按其出现次数进行分组,并相应地对value列表进行相同分组,最终得到了有序的子列表集合。
2820

被折叠的 条评论
为什么被折叠?



