如何将统计账单列表中账单最多企业的Python代码写得更精简?
代码精简方案
你可以直接使用Python标准库内置的collections.Counter完成频次统计,既可以大幅减少代码量,也能提升运行效率,避免多次遍历列表的冗余操作。精简后保留全部原有功能的代码如下:
from collections import Counter def company_report(bills): """统计账单数量最多的企业,输出格式化报表并返回对应企业列表""" # 一步完成企业名提取(大小写统一)+ 频次统计 company_counter = Counter(bill[0].lower() for bill in bills) # 取最高账单数 max_bill_count = max(company_counter.values()) # 直接筛选所有账单数等于最大值的企业,天然去重 top_companies = [comp for comp, cnt in company_counter.items() if cnt == max_bill_count] # 原有打印逻辑保留不变 row = "| {:17} | {:5} |" print("\n" + "{:=^29}".format(" Most Popular Company ")) print(row.format("Company", "Bills")) print(row.format("-" * 17, "-" * 5)) for company in top_companies: print(row.format(company.title(), max_bill_count)) print("=" * 29) return top_companies
主要优化点说明
- 用
Counter替代手动循环统计:Counter只会遍历一次账单列表完成所有企业的频次统计,你原有写法中companies_bills.count(i)每次调用都会遍历一次全列表,账单数量大的时候效率差距非常明显 - 省略冗余的索引查找、手动去重步骤:
Counter的键本身就是唯一的企业名称,不需要再通过索引反向查找企业,也不用单独写循环去重,逻辑更简洁不易出错 - 变量命名更清晰,避免无意义的变量名比如
dummy,后续维护更容易
内容的提问来源于stack exchange,提问作者huibuh715
相关产品推荐
相关产品推荐

