按列表b的元素值分组,求列表a对应索引元素的最小值
解决方案:按列表b的分组求列表a对应元素的最小值
嘿,这个需求很清晰,咱们用Python就能轻松实现,核心思路就是按b中的元素值对a的元素分组,再分别计算每组的最小值。下面结合你给出的示例一步步说明:
步骤1:准备示例数据
先把你提供的示例列表写出来:
a = [10,33,42,17,9,32,33,43,12,2,5,22] b = [3,1,3,2,1,3,2,1,3,1,2,2]
步骤2:分组收集对应元素
我们可以用一个字典来存储分组,键是b中的可能值(1、2、3),值是a中对应位置的元素列表:
# 初始化分组字典,预设1、2、3三个分组 groups = {1: [], 2: [], 3: []} # 同时遍历a和b的对应元素,把a的元素归入对应分组 for num_a, num_b in zip(a, b): groups[num_b].append(num_a)
执行完这段代码后,groups的内容会是:
{1: [33, 9, 43, 2], 2: [17, 33, 5, 22], 3: [10, 42, 32, 12]}
步骤3:计算每组的最小值
接下来对每个分组的列表调用min()函数就能得到对应最小值:
# 分别计算三个分组的最小值 min_for_1 = min(groups[1]) min_for_2 = min(groups[2]) min_for_3 = min(groups[3]) # 输出结果 print(f"b中值为1的索引对应a元素的最小值:{min_for_1}") print(f"b中值为2的索引对应a元素的最小值:{min_for_2}") print(f"b中值为3的索引对应a元素的最小值:{min_for_3}")
运行这段代码会输出:
b中值为1的索引对应a元素的最小值:2 b中值为2的索引对应a元素的最小值:5 b中值为3的索引对应a元素的最小值:10
优化版:用字典推导式一步生成结果
如果想更简洁,我们可以用字典推导式直接生成包含所有最小值的结果字典:
result = {key: min(vals) for key, vals in groups.items()} print(result) # 输出: {1: 2, 2: 5, 3: 10}
健壮性优化:处理分组为空的情况
如果b中某个值(比如1)没有出现,直接调用min()会报错。这时候可以给min()加个判断,为空时返回None或者其他默认值:
result = {key: min(vals) if vals else None for key, vals in groups.items()}
内容的提问来源于stack exchange,提问作者gunjanpatait
相关产品推荐
相关产品推荐

