如何匹配两个列表,查找最值对应的关联元素(如销售额对应月份)
如何获取销售额最值对应的月份
问题背景
我从包含month和sales列的CSV文件中读取数据,将月份存入monthSales列表(字符串类型),销售额存入totalSales列表(字符串类型),代码如下:
monthSales = [] totalSales = [] for col in sale: monthSales.append(col['month']) totalSales.append((col['sales'])) print('Month: ', monthSales) print('Sales: ', totalSales) print(max(totalSales)) print(min(totalSales))
执行后输出:
Month: ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] Sales: ['6226', '1521', '1842', '2051', '1728', '2138', '7479', '4434', '3615', '5472', '7224', '1812']
目前我能通过max()和min()获取销售额的最值,但需要同时提取对应的月份并展示(例如最高销售额7479对应7月),该如何实现?
解决方案
方法1:通过索引匹配(基础版)
注意:当前totalSales中的销售额是字符串类型,虽然短数字字符串的比较结果和数字一致,但遇到长度不同的数字(如"999"和"1000")会出错,所以第一步要把销售额转为整数类型,再通过索引关联对应月份。
# 将字符串类型的销售额转为整数 sales_numbers = [int(s) for s in totalSales] # 获取最高销售额及对应月份 max_sale = max(sales_numbers) max_index = sales_numbers.index(max_sale) print(f"最高销售额:{max_sale},对应月份:{monthSales[max_index]}") # 获取最低销售额及对应月份 min_sale = min(sales_numbers) min_index = sales_numbers.index(min_sale) print(f"最低销售额:{min_sale},对应月份:{monthSales[min_index]}")
方法2:打包列表为元组(更简洁)
使用zip()将月份和数字类型的销售额打包成元组,再通过max()/min()的key参数直接按销售额排序,一步获取对应条目:
# 打包月份与数字类型的销售额 month_sale_pairs = list(zip(monthSales, map(int, totalSales))) # 按销售额找最大值对应的条目 max_item = max(month_sale_pairs, key=lambda x: x[1]) print(f"最高销售额:{max_item[1]},对应月份:{max_item[0]}") # 按销售额找最小值对应的条目 min_item = min(month_sale_pairs, key=lambda x: x[1]) print(f"最低销售额:{min_item[1]},对应月份:{min_item[0]}")
内容的提问来源于stack exchange,提问作者Sashraf
相关产品推荐
相关产品推荐

