如何从并行的products与sales列表中获取销量TOP5的产品?
获取销量前五产品的正确方法
你原来的代码有两个问题:
- 变量名写错了,
produtos应该是products Counter的用法完全不对——它是用来统计列表元素的出现次数,没法帮你把产品和对应的销量关联起来排序。
下面是几种可行的解法:
方法一:zip打包+排序(最基础)
先把产品和对应的销量配对,再按销量降序排序,最后取前5个:
products = ['coca', 'pepsi', 'guarana', 'skol', 'brahma', 'agua', 'del valle', 'dolly', 'red bull', 'cachaça', 'vinho tinto', 'vodka', 'vinho branco', 'tequila', 'champagne', 'gin', 'guaracamp', 'matte', 'leite de castanha', 'leite', 'jurupinga', 'sprite', 'fanta'] sales = [1200, 300, 800, 1500, 1900, 2750, 400, 20, 23, 70, 90, 80, 1100, 999, 900, 880, 870, 50, 1111, 120, 300, 450, 800] # 打包产品与销量为元组列表 product_sales_pairs = list(zip(products, sales)) # 按销量降序排序,key指定取元组的第二个元素(销量) sorted_pairs = sorted(product_sales_pairs, key=lambda item: item[1], reverse=True) # 提取前五名 top5_products = sorted_pairs[:5] print(top5_products)
运行结果:
[('agua', 2750), ('brahma', 1900), ('skol', 1500), ('coca', 1200), ('leite de castanha', 1111)]
方法二:更简洁的写法
可以把步骤合并成一行,省去中间变量:
top5_products = sorted(zip(products, sales), key=lambda x: -x[1])[:5] print(top5_products)
这里用-x[1]代替reverse=True,同样能让销量高的排在前面。
方法三:用heapq(适合大数据量场景)
如果产品和销量数据量极大,排序会占用较多内存,这时用heapq.nlargest直接取最大的5个,效率更高:
import heapq top5_products = heapq.nlargest(5, zip(products, sales), key=lambda x: x[1]) print(top5_products)
内容的提问来源于stack exchange,提问作者CircleFire95317
相关产品推荐
相关产品推荐

