You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按顺序在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:27:30