如何用Python实现:从数组中找和为目标值的元素并返回索引-值字典
解决方案
要实现返回包含元素索引与值的字典,核心是保留元素的索引信息——你原来的代码直接对数组元素做组合,丢失了索引,所以没法构建目标字典。下面是修改后的代码:
import itertools def findWithSum(arr, value, n=2): # 生成索引的组合,而不是元素的组合 index_combinations = itertools.combinations(range(len(arr)), n) for indices in index_combinations: # 通过索引获取对应元素,计算和 elements = [arr[i] for i in indices] if sum(elements) == value: # 构建{索引:元素值}的字典并返回 return {i: arr[i] for i in indices} # 如果没找到符合条件的组合,返回空字典或None,根据需求调整 return {} arr = [1, 2, 3] print(findWithSum(arr, 3, 2)) # 输出: {0: 1, 1: 2}
关键修改说明
- 用
itertools.combinations(range(len(arr)), n)生成索引的组合,而不是直接对数组元素组合,这样能拿到每个元素的位置信息。 - 找到符合和为目标值的索引组合后,用字典推导式
{i: arr[i] for i in indices}直接构建需要的字典结构。 - 如果需要返回所有符合条件的组合(而不仅仅是第一个),可以把结果收集到列表中返回,比如:
调用后会返回所有符合条件的字典组成的列表,比如如果数组是def findWithSum(arr, value, n=2): index_combinations = itertools.combinations(range(len(arr)), n) result = [] for indices in index_combinations: elements = [arr[i] for i in indices] if sum(elements) == value: result.append({i: arr[i] for i in indices}) return result[1,2,0,3],找和为3的两个数,会返回[{0:1,1:2}, {0:1,3:3}, {2:0,3:3}]。
内容的提问来源于stack exchange,提问作者prodoto
相关产品推荐
相关产品推荐

