Python列表数据转换:子列表第三项后元素除以第三项的实现
嵌套列表元素按基准项计算比例的解决方案
原代码存在的问题
- 类型错误:
int(x[2:])完全不可行,x[2:]是一个子列表,无法直接转换为整数,必须逐个处理其中的元素 - 参数不匹配:函数定义里未声明
col_id参数,但调用时却传入了该参数,会直接触发报错 - 丢失原数据:原代码仅存储计算后的结果,未保留子列表的前两项,不符合多数场景的需求
- 精度丢失:使用
//整数除法会丢弃小数部分,若需比例值建议改用浮点数除法/
正确实现方式
我们需要保留每个子列表中基准项及之前的内容,再将基准项之后的每个元素除以基准项,生成新的嵌套列表:
def convert_data_percentages(data, col_id=2): processed_list = [] for sublist in data: # 将基准项转为整数,作为计算的除数 base_value = int(sublist[col_id]) # 先保留基准项及之前的所有原始内容 new_sublist = sublist[:col_id+1] # 遍历基准项之后的每个元素,计算比例 for num_str in sublist[col_id+1:]: # 转换为整数后做浮点数除法,得到比例值 ratio = int(num_str) / base_value # 可选:若需要百分比形式,可改为以下代码 # ratio = round((int(num_str)/base_value)*100, 2) new_sublist.append(ratio) processed_list.append(new_sublist) return processed_list # 测试用的示例数据 sample_data = [["'s-Gravenhage", 'GM0518', '537833', '266778', '271055', '92532', '66099', '162025', '139157', '78020', '304766', '162020', '51430', '19617'], ['Rotterdam', 'GM0599', '644618', '317935', '326683', '103680', '86037', '197424', '159008', '98469', '367279', '187835', '62703', '26801']] # 调用函数处理数据 result = convert_data_percentages(sample_data) # 打印第一个子列表查看效果 print(result[0])
额外说明
- 如果需要输出百分比形式,将计算比例的代码改为
ratio = round((int(num_str)/base_value)*100, 2),即可得到保留两位小数的百分比数值 col_id参数默认值为2(对应第三项),若后续基准项位置变更,直接传入对应索引值即可灵活调整
内容的提问来源于stack exchange,提问作者Nikos Koutas
相关产品推荐
相关产品推荐

