一个简单的问题,不借助pandas,二维列表如何快速分组?
[['A',33],['A',0],['A',12],['A',3],['B',3],['B',0],['B',77],['C',1],['C',2],['C',5],['C',0],['C',11],['C',19]]
或者
[['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C'], [33, 0, 12, 3, 3, 0, 77, 1, 2, 5, 0, 11, 19]]
分组是连续的,分组长度不等,根据组名分组,保持原来的顺序,不用while遍历有现存的库代码吗?列表较大,我担心用pandas速度较慢
[[33,0,12,3],[3,0,77],[1,2,5,0,11,19]]
本来不想用append,担心数组大了速度问题,还是先用append凑合
data = [['A',33],['A',0],['A',12],['A',3],['B',3],['B',0],['B',77],['C',1],['C',2],['C',5],['C',0],['C',11],['C',19]]
def group_name_fun(lst):
last=''
arr=[]
for ii in range(len(lst)):
if not lst[ii][0]==last:
arr.append(ii)
last=lst[ii][0]
arr.append(len(lst))
lst=[lst[arr[ii-1]:arr[ii]] for ii in range(1, len(arr))]
return lst
print(group_name_fun(data))
要在不使用
append
的情况下处理大数组,可以考虑使用生成器或者 itertools 这样的模块来进行高效处理。这种方法可以减少内存占用并提高处理速度。以下是使用itertools
模块的解决方案:使用 itertools 模块处理大数组
解释
itertools.groupby
按照键值对数据进行分组。这种方法避免了显式使用
append
,并且在处理大数组时具有较高的效率。通过生成器和 itertools 模块,内存占用也能得到有效控制。