You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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

火山引擎 最新活动