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

Python如何从列表的列表中提取指定开头子列表的两个值?

解决方案

核心思路是遍历子列表,通过第一个元素的唯一值定位目标项——因为子列表顺序动态变化,索引定位不可靠,只能依赖第一个元素的匹配关系。

代码实现步骤

  1. 从接口获取JSON数据,提取目标列表vsRTop
  2. 取出要匹配的目标值(注意别用id当变量名,这是Python内置函数,容易冲突)
  3. 遍历vsRTop,找到第一个元素匹配目标值的子列表
  4. 提取该子列表的第二个(索引1)和第三个(索引2)元素

完整代码示例

import json

# 模拟接口返回的JSON数据(实际场景替换成接口请求逻辑)
json_data = {
    "top": [[266, 5300, 2696, 50.88], [36, 5191, 2938, 53.16], [875, 5133, 2553, 51.29]]
}
# 你的id字典
id_dict = {"id1": 875}

vsRTop = json_data['top']
target_id = id_dict['id1']

# 遍历查找目标子列表
second_elem = None
third_elem = None
for sub_list in vsRTop:
    # 确保子列表非空且第一个元素匹配
    if sub_list and sub_list[0] == target_id:
        second_elem = sub_list[1]
        third_elem = sub_list[2]
        break  # 找到后直接退出循环,提升效率

if second_elem is not None and third_elem is not None:
    print(f"提取结果:第二个元素={second_elem}, 第三个元素={third_elem}")
else:
    print(f"未找到以{target_id}开头的子列表")

优化方案(适合频繁查询场景)

如果需要多次查询不同的id值,建议提前把列表转换成字典映射,后续查询直接通过键获取,时间复杂度从O(n)降到O(1):

# 提前构建映射字典,以子列表第一个元素为键
top_map = {sub[0]: sub for sub in vsRTop if sub}

# 直接通过目标id查询
if target_id in top_map:
    sub_list = top_map[target_id]
    second_elem = sub_list[1]
    third_elem = sub_list[2]
    print(f"提取结果:第二个元素={second_elem}, 第三个元素={third_elem}")
else:
    print(f"未找到以{target_id}开头的子列表")

内容的提问来源于stack exchange,提问作者T K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:23:16