如何重排选手列表中的姓名字符串并计算整数平均值?
问题与解决方案
需求说明
课程作业要求:读取文件并转换为嵌套列表(每个子列表对应一位选手),在此基础上完成两个处理:
- 姓名字符串重排,例如将
Ty Cobb改为Cobb, Ty - 计算每个子列表中所有整数的平均值
最终输出格式要求为[[Cobb, Ty, 3747.5], [...], [...]]
现有实现代码
my_file = open("sample-1.txt.txt") data3 = my_file.read() list1 = data3.split(" ") flist = list() len_flist = 10 for i in range(0, len(list1), len_flist): flist.append(list1[i:i+len_flist]) my_file.close() print(flist)
当前输出
[['Ty', 'Cobb', '13099', '11434', '3053', '724', '295', '117', '1249', '9'], ['\nChipper', 'Jones', '10614', '8984', '1671', '549', '38', '468', '1512', '1'], ['\nJonny', 'Bench', '8674', '7658', '1254', '381', '24', '389', '891', '1'], ['\nHank', 'Aaron', '13941', '12364', '2294', '624', '98', '755', '1402', '3'], ['\nTony', 'Gwynn', '10232', '9288', '2378', '543', '85', '135', '434', '2'], ['\nJohn', 'Smoltz', '1167', '948', '118', '26', '2', '5', '79', '3'], ['\nAaron', 'Woods', '1122', '123', '324', '45', '88', '1561', '9', '18']]
解决方案
处理步骤说明
- 清理名字中的换行符:当前部分子列表的第一个名字带有
\n,用strip()方法去除多余字符 - 重排姓名格式:将
名 姓的格式转换为姓, 名 - 计算整数平均值:提取子列表中从第3个元素开始的所有字符串,转换为整数后计算平均值
- 整合结果:将重排后的姓名和平均值组成新的子列表,形成目标格式的嵌套列表
修改后完整代码
my_file = open("sample-1.txt.txt") data3 = my_file.read() list1 = data3.split(" ") flist = list() len_flist = 10 for i in range(0, len(list1), len_flist): flist.append(list1[i:i+len_flist]) my_file.close() # 处理每位选手的数据生成结果 result = [] for player in flist: # 清理名字中的换行符并拆分 first_name = player[0].strip() last_name = player[1].strip() # 重排姓名为目标格式 formatted_name = f"{last_name}, {first_name}" # 提取数字部分并转整数,计算平均值 num_list = list(map(int, player[2:])) average = sum(num_list) / len(num_list) # 添加到结果列表 result.append([formatted_name, average]) print(result)
代码解释
player[0].strip():去除名字开头的换行符和多余空格f"{last_name}, {first_name}":用格式化字符串快速拼接成目标姓名格式list(map(int, player[2:])):将子列表中从第3位开始的字符串批量转换为整数sum(num_list) / len(num_list):计算整数列表的平均值,自动保留小数精度
内容的提问来源于stack exchange,提问作者Ash Lucky
相关产品推荐
相关产品推荐

