Python:如何合并序列为列表形式新列表并修正重复条目
如何修改Python代码实现特征与值的一一对应列表?
问题背景
我写了一段Python代码处理特征数据,但输出结果不符合预期:
x = [] for fitur in self.fiturs: x.append(fitur[0]) a = [x , rpxy_list] join = zip(*a) print(join)
其中self.fiturs是每行逗号分隔的特征数据集:
F1,1,1,1,1,0,1,1,0,0,1 F2,1,0,0,0,0,0,1,0,1,1 F3,1,0,0,0,0,0,1,1,1,1 F4,1,0,0,0,0,0,1,1,1,0 F5,14,24,22,22,22,16,18,19,26,22 F6,8.0625,6.2,6.2609,6.6818,6.2174,6.3333,7.85,6.0833,6.9655,6.9167 F7,0,0,0,0,0,0,1,0,1,0 F8,1,0,2,0,0,0,2,0,0,0 F9,1,0,0,0,1,1,0,0,0,0 F10,8,4,3,3,3,6,8,5,8,4 F11,0,0,1,0,0,1,0,0,0,0 F12,1,0,0,0,1,0,1,1,1,1
rpxy_list是一个浮点数列。当前输出是包含元组的列表,还出现了重复的F1条目,我想要的是每个特征对应一个值的列表形式,比如:
['F1', 0.2182178902359924] ['F2', 0.408248290463863] ...
解决方案
先拆解问题:核心需求是把特征名和对应浮点值包装成列表,同时解决重复条目问题。下面分两种情况给出修改方案:
情况1:确认self.fiturs中每个特征只出现一次
如果你的self.fiturs本身就是每个特征一行(像示例数据那样),直接简化代码并转换格式即可:
# 提取所有特征名 feature_names = [fitur[0] for fitur in self.fiturs] # 生成期望的列表格式,将zip生成的元组转为列表 result = [[name, val] for name, val in zip(feature_names, rpxy_list)] # 打印结果(逐行输出更清晰) for item in result: print(item)
情况2:self.fiturs存在重复的特征行(导致重复F1)
如果数据里确实有重复的特征条目,先通过字典去重(保留每个特征第一次出现的记录),再生成结果:
# 用字典去重,键为特征名,值为对应行数据 unique_features = {} for fitur in self.fiturs: feat_name = fitur[0] if feat_name not in unique_features: unique_features[feat_name] = fitur # 提取去重后的特征名列表 feature_names = list(unique_features.keys()) # 生成目标格式的列表 result = [[name, val] for name, val in zip(feature_names, rpxy_list)] # 输出结果 for item in result: print(item)
关键说明
zip(feature_names, rpxy_list)能保证特征和值一一对应,前提是两者的长度必须一致,如果长度不匹配,需要先检查rpxy_list的元素数量是否和特征数量对应。- 列表推导式
[[name, val] ...]直接把zip生成的元组转换成了列表,完美匹配你想要的输出格式。 - 去重步骤是可选的,如果你确认数据没有重复,可以跳过这部分,直接用第一种方案。
内容的提问来源于stack exchange,提问作者Fachrul Rozy Saputra R




