Python遍历切片列表移除梦幻足球队名字符串末尾0的实现方法
解决方法
原代码错误原因
原rank列表按[排名, 带尾0的队名, 积分]每3个元素为一组排列,你的代码存在两个核心问题:
- 循环索引没有对应到队名实际所在的位置:队名全部在索引为1、4、7……的位置,即步长为3、起始索引为1的序列,你原循环的索引i修改的是列表前几位的元素,没有命中队名位置。
- 列表推导式逻辑错误:你遍历了所有队名的所有字符做判断,而不是对单个队名做末尾去0处理,自然无法得到正确结果。
最优实现方案
直接用字符串内置的rstrip('0')方法去掉队名末尾的0,再按3个元素为一组的规则格式化输出即可,代码简洁且时间复杂度为O(n),效率最高:
rank = ['1', 'Kaufman Foundation0', '0', '2', 'sasicc e friarielli0', '0', '3', 'Mordi1992 Team0', '0', '4', 'Japanese Cry Team0', '0', '5', 'Le Rondini FC0', '0', '6', 'Team Mclaury0', '0', '7', 'Team Discio0', '0', '8', 'Papa Sarto Calcio0', '0'] # 方法1:分步处理,可读性高 # 先批量处理所有队名的末尾0 for idx in range(1, len(rank), 3): rank[idx] = rank[idx].rstrip('0') # 按要求格式输出 output_list = [] for i in range(0, len(rank), 3): format_str = f"{rank[i]} - {rank[i+1]} {rank[i+2]}" output_list.append(format_str) print(format_str) # 方法2:一行式生成结果,代码更精简 output_list = [f"{r} - {n.rstrip('0')} {s}" for r, n, s in zip(rank[::3], rank[1::3], rank[2::3])]
运行后输出结果完全符合要求:
1 - Kaufman Foundation 0 2 - sasicc e friarielli 0 3 - Mordi1992 Team 0 4 - Japanese Cry Team 0 5 - Le Rondini FC 0 6 - Team Mclaury 0 7 - Team Discio 0 8 - Papa Sarto Calcio 0
内容的提问来源于stack exchange,提问作者Emiliano
相关产品推荐
相关产品推荐

