如何按AA列表位置为first/second列表补全None值
对齐Python列表并填充缺失值为None
问题场景
现有Python数据集thelist,提取后得到三个列表:
aa = ['24', '26', '27', '29'](完整的AA编号列表)first = ['Animal', 'Cotton', 'BAMB'](缺失对应AA 27的元素)second = ['Ksiriki', 'Fid', 'ST'](缺失对应AA 27的元素)
需要保持列表顺序与aa完全一致,在first和second中对应AA 27的位置填充None,最终得到:
first = ['Animal', 'Cotton', None, 'BAMB']second = ['Ksiriki', 'Fid', None, 'ST']
解决方案1:基于字典映射填充
如果提取过程中可以获取有数据的AA与对应值的映射关系,直接遍历aa列表逐个匹配:
# 从thelist中提取的有效数据映射(仅包含有对应值的AA) valid_data = { '24': ('Animal', 'Ksiriki'), '26': ('Cotton', 'Fid'), '29': ('BAMB', 'ST') } aa = ['24', '26', '27', '29'] first = [] second = [] for aa_num in aa: if aa_num in valid_data: f_val, s_val = valid_data[aa_num] first.append(f_val) second.append(s_val) else: first.append(None) second.append(None) # 验证结果 print(first) # 输出: ['Animal', 'Cotton', None, 'BAMB'] print(second) # 输出: ['Ksiriki', 'Fid', None, 'ST']
解决方案2:基于现有列表索引映射填充
如果已经得到了existing_aa(即first/second对应的AA编号列表),可以通过索引映射来对齐填充:
aa = ['24', '26', '27', '29'] existing_aa = ['24', '26', '29'] # first/second对应的AA编号 first = ['Animal', 'Cotton', 'BAMB'] second = ['Ksiriki', 'Fid', 'ST'] # 构建现有AA到列表索引的映射 aa_to_idx = {num: idx for idx, num in enumerate(existing_aa)} new_first = [] new_second = [] for aa_num in aa: if aa_num in aa_to_idx: idx = aa_to_idx[aa_num] new_first.append(first[idx]) new_second.append(second[idx]) else: new_first.append(None) new_second.append(None) # 验证结果 print(new_first) # 输出: ['Animal', 'Cotton', None, 'BAMB'] print(new_second) # 输出: ['Ksiriki', 'Fid', None, 'ST']
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

