Python中实现航班号与乘客数冒号拼接及航班乘客统计问题
解决航班乘客统计中的字符串拼接与逻辑问题
看起来你在统计航班乘客数量时遇到了两个核心问题:一是append方法的使用错误,二是原逻辑存在重复添加的隐患。让我一步步帮你梳理解决:
1. 修复append行的错误
你的代码中finallist.append(elem,":",count)这一行有两个明显问题:
list.append()方法只能接受一个参数,你传入三个参数会直接抛出TypeError。- 你需要将航班号、冒号、乘客数拼接成单个字符串,再添加到结果列表中。
Python中用冒号连接两个值的三种常用方式
这里有几种简洁的实现方式,按需选择:
- f-string(推荐,Python3.6+):最直观的写法,自动处理类型转换(比如把整数
count转为字符串)finallist.append(f"{elem}:{count}") str.format()方法:兼容更早的Python版本finallist.append("{}:{}".format(elem, count))- 字符串拼接:需要手动将非字符串类型转为字符串
finallist.append(elem + ":" + str(count))
2. 修复原逻辑的重复添加问题
你的代码还有个隐藏bug:if elem not in finallist:的判断会完全失效。因为finallist里的元素是拼接后的字符串(比如"AI567:2"),而elem是纯航班号(比如"AI567"),所以每次循环都会认为elem不在列表中,导致重复添加相同航班的条目。
更高效的优化方案(用字典统计)
推荐用字典来统计航班频次,只需要遍历一次票务列表,时间复杂度从O(n²)降到O(n),逻辑也更清晰:
def find_passengers_per_flight(): '''Write the logic to find and return a list having number of passengers traveling per flight based on the details in the ticket_list In the list, details should be provided in the format: [flight_no:no_of_passengers, flight_no:no_of_passengers, etc.].''' ticket_list = ["AI567:MUM:LON:014","AI077:MUM:LON:056", "BA896:MUM:LON:067", "SI267:MUM:SIN:145","AI077:MUM:CAN:060","SI267:BLR:MUM:148","AI567:CHE:SIN:015","AI077:MUM:SIN:050","AI077:MUM:LON:051","SI267:MUM:SIN:146"] flight_counts = {} # 遍历票务列表,统计每个航班的乘客数 for ticket in ticket_list: flight_no = ticket.split(":")[0] if flight_no in flight_counts: flight_counts[flight_no] += 1 else: flight_counts[flight_no] = 1 # 将字典转换为要求的格式列表 finallist = [f"{flight}:{count}" for flight, count in flight_counts.items()] print(finallist) return finallist
运行后会输出符合要求的结果:
['AI567:2', 'AI077:4', 'BA896:1', 'SI267:3']
总结
- 用
f-string是Python中拼接字符串最便捷的方式,支持变量直接嵌入,代码可读性拉满。 - 统计频次时优先使用字典,不仅效率更高,还能避免重复判断的逻辑错误。
内容的提问来源于stack exchange,提问作者Divyanshu Sharma
相关产品推荐
相关产品推荐

