Python中依据对应权重子列表排序子列表的高效方法咨询
更高效的Numpy实现方案
你的原代码逻辑没问题,确实能精准完成按对应权重子列表排序的需求~不过如果要处理大规模数据,用Numpy的向量化操作能带来明显的效率提升,下面是具体的实现方案:
Numpy版实现代码
import numpy as np # 先把嵌套列表转换成numpy数组,方便后续向量化操作 arr1 = np.array(list1) arr2 = np.array(list2) # 获取每个子列表按权重排序的索引(argsort会返回排序后的元素原位置索引) sorted_indices = np.argsort(arr2, axis=1) # 根据得到的索引,对原数据数组进行排序 sorted_arr1 = np.take_along_axis(arr1, sorted_indices, axis=1) # 如果需要转回Python列表格式,直接调用tolist()即可 sort_fea = sorted_arr1.tolist() print('The sorted_list1 =', sort_fea)
为什么这个方法更高效?
- 底层向量化加速:Numpy的
argsort和take_along_axis都是用C语言实现的底层操作,避免了Python层面的循环开销,当你的嵌套列表规模很大时,速度会比纯Python循环快好几倍甚至几十倍。 - 内存更紧凑:Numpy数组的内存布局是连续的,相比Python列表零散的内存占用,能减少内存浪费,处理大数据时的优势会更明显。
可选:Pandas实现方式
如果你平时更习惯用Pandas处理数据,也可以用DataFrame来实现,代码可读性也很好:
import pandas as pd sort_fea = [] for c1, c2 in zip(list1, list2): # 把每个子列表和对应权重拼成DataFrame df = pd.DataFrame({'value': c1, 'weight': c2}) # 按权重排序后提取value列 sorted_values = df.sort_values('weight')['value'].tolist() sort_fea.append(sorted_values) print('The sorted_list1 =', sort_fea)
不过要注意,Pandas更擅长处理表格型的结构化数据,单纯做这种排序操作的话,Numpy的性能还是会更胜一筹。
内容的提问来源于stack exchange,提问作者Saeed Hassiny
相关产品推荐
相关产品推荐

