如何按顺序在Python数组列表中查找多个值并合并结果?
按顺序查找Python列表中的多个值并合并结果
给定目标列表:
arr = [('var1','val1'),('var2','val2'),('var3','val3'),('var4','val4'),('var1','val5'),('var3','val6'),('var5','val7'),('var1','val8'),('var3','val9'),('var6','val10')]
需求如下:
- 查找单个变量
'var1'时,返回val1 - 查找变量序列
'var1 var3'时,返回val5, val6 - 查找变量序列
'var1 var3 var6'时,返回val8, val9, val10
解决方案(匹配示例预期逻辑)
从示例规律来看,查找序列长度为n时,返回每个变量的第n次出现的值(若变量出现次数不足n,则取最后一次出现的值)。实现代码如下:
def find_target_values(arr, find_str): # 将查找字符串拆分为目标变量列表 target_vars = find_str.split() seq_length = len(target_vars) # 先统计每个变量的所有出现值 var_value_list = {} for var, val in arr: if var not in var_value_list: var_value_list[var] = [] var_value_list[var].append(val) # 按规则收集结果 result = [] for var in target_vars: vals = var_value_list.get(var, []) # 取第seq_length次出现(索引为seq_length-1),长度不足则取最后一个 pick_idx = min(seq_length - 1, len(vals) - 1) result.append(vals[pick_idx]) return result # 测试示例 arr = [('var1','val1'),('var2','val2'),('var3','val3'),('var4','val4'),('var1','val5'),('var3','val6'),('var5','val7'),('var1','val8'),('var3','val9'),('var6','val10')] print(find_target_values(arr, 'var1')) # 输出: ['val1'] print(find_target_values(arr, 'var1 var3')) # 输出: ['val5', 'val6'] print(find_target_values(arr, 'var1 var3 var6')) # 输出: ['val8', 'val9', 'val10']
扩展方案:查找最后一组按顺序匹配的序列
如果需求是找到最后一组按顺序完整出现的变量序列(每个后续变量出现在前一个变量之后),可以用以下代码:
def find_last_matching_sequence(arr, find_str): target_vars = find_str.split() if not target_vars: return [] current_match_idx = 0 temp_result = [] final_result = [] for var, val in arr: if var == target_vars[current_match_idx]: temp_result.append(val) current_match_idx += 1 # 匹配完整个序列后,记录结果并重置继续查找后续可能的序列 if current_match_idx == len(target_vars): final_result = temp_result.copy() current_match_idx = 0 temp_result = [] return final_result # 测试 print(find_last_matching_sequence(arr, 'var1')) # 输出: ['val8'] print(find_last_matching_sequence(arr, 'var1 var3')) # 输出: ['val5', 'val6'] print(find_last_matching_sequence(arr, 'var1 var3 var6')) # 输出: ['val8', 'val9', 'val10']
内容的提问来源于stack exchange,提问作者Özgür Kalyoncu
相关产品推荐
相关产品推荐

