Python嵌套列表搜索指定ID并提取整数列表的问题求助
问题解决:在嵌套列表中搜索ID并提取对应整数
原代码存在的问题
- 找到匹配子列表后,生成的列表推导式未被输出或返回,仅创建了一个未使用的临时列表
- 即使匹配成功,循环不会终止,最终仍会执行末尾的
print("Not found: ",index)语句 - 不必要的内层循环:每个子列表的第一个元素即为ID,无需遍历子列表所有元素判断
修正后的代码方案
方案1:直接输出结果
import numbers def list_search(lister, index): for sub_list in lister: # 直接检查子列表第一个元素是否为目标ID if sub_list[0] == index: # 提取子列表中的所有整数 result = [x for x in sub_list if isinstance(x, numbers.Number)] print(result) # 找到目标后立即返回,避免执行后续的"未找到"提示 return # 遍历完所有子列表仍未找到时执行 print("Not found: ", index) # 测试代码 list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]] list_search(list1,'id2')
方案2:返回结果(更灵活)
如果希望函数返回结果而非直接打印,可使用以下版本:
import numbers def list_search(lister, index): for sub_list in lister: if sub_list[0] == index: return [x for x in sub_list if isinstance(x, numbers.Number)] return f"Not found: {index}" # 测试代码 list1 = [['id1','Jane','Doe',100,75,100],['id2','John','Snow',90,87,92],['id3','Peter','Pan',79,81,83]] result = list_search(list1,'id2') print(result)
说明
- 两种方案都去掉了冗余的内层循环,直接通过
sub_list[0]定位ID,提升效率 - 找到匹配项后立即返回,避免无效循环和错误的"未找到"提示
- 使用
isinstance(x, numbers.Number)可以匹配所有数值类型(如果只需要整数,也可以改为isinstance(x, int))
内容的提问来源于stack exchange,提问作者Nduatee
相关产品推荐
相关产品推荐

