如何以参考数组为基准,用0(或NaN)填充目标数组?
问题描述
现有如下数组集合:
[ ['ENST00000003084', 'ENST00000426809', 'ENST00000454343'], ['ENST00000003084', 'ENST00000426809', 'ENST00000446805', 'ENST00000454343'], ['ENST00000003084', 'ENST00000454343'], ['ENST00000003084', 'ENST00000426809', 'ENST00000454343', 'ENST00000600166'] ]
需要将每个子数组按照参考数组的顺序对齐,缺失的位置填充为0,最终每个子数组都包含6个元素。参考数组如下:
['ENST00000003084', 'ENST00000426809', 'ENST00000446805', 'ENST00000454343', 'ENST00000468795', 'ENST00000600166']
示例:输入子数组['ENST00000003084', 'ENST00000426809', 'ENST00000454343'],处理后输出:
['ENST00000003084', 'ENST00000426809', 0, 'ENST00000454343', 0, 0]
解决方案
通过遍历参考数组的每个元素,检查当前子数组中是否存在该元素,存在则保留原元素,不存在则填充0。Python实现代码如下:
# 定义参考数组 ref_array = ['ENST00000003084', 'ENST00000426809', 'ENST00000446805', 'ENST00000454343', 'ENST00000468795', 'ENST00000600166'] # 输入的数组集合 input_arrays = [ ['ENST00000003084', 'ENST00000426809', 'ENST00000454343'], ['ENST00000003084', 'ENST00000426809', 'ENST00000446805', 'ENST00000454343'], ['ENST00000003084', 'ENST00000454343'], ['ENST00000003084', 'ENST00000426809', 'ENST00000454343', 'ENST00000600166'] ] # 处理每个子数组 result = [] for arr in input_arrays: arr_set = set(arr) # 转为集合提升查找效率 aligned = [elem if elem in arr_set else 0 for elem in ref_array] result.append(aligned) # 输出处理结果 for idx, res in enumerate(result): print(f"处理后的子数组{idx+1}: {res}")
运行结果
处理后的子数组1: ['ENST00000003084', 'ENST00000426809', 0, 'ENST00000454343', 0, 0] 处理后的子数组2: ['ENST00000003084', 'ENST00000426809', 'ENST00000446805', 'ENST00000454343', 0, 0] 处理后的子数组3: ['ENST00000003084', 0, 0, 'ENST00000454343', 0, 0] 处理后的子数组4: ['ENST00000003084', 'ENST00000426809', 0, 'ENST00000454343', 0, 'ENST00000600166']
内容的提问来源于stack exchange,提问作者Camila
相关产品推荐
相关产品推荐

