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

如何按指定列表值分类提取目标列表的对应索引?

按指定列表分类提取目标列表元素的索引实现方法

下面是几种实用的Python实现方案,针对你给出的需求场景:

方法一:手动初始化字典+遍历

先创建以列表n元素为键、空列表为值的字典,再遍历目标列表b的索引和元素,把对应索引追加到字典的对应键列表中。

n = [0,1,2,3]
b = [1,1,1,2,3,0,0,1,2]

# 初始化结果字典
result = {num: [] for num in n}
# 遍历b的索引和元素
for idx, val in enumerate(b):
    if val in result:  # 确保只处理n中存在的值
        result[val].append(idx)

# 按要求格式输出
for num in n:
    print(f"{num}: {result[num]}")

输出结果和你期望的一致,这种方法逻辑清晰,容易理解,适合需要精准控制处理范围的场景。

方法二:使用collections.defaultdict简化初始化

借助collections模块的defaultdict,可以不用提前初始化所有键,遍历过程中自动为出现的键创建空列表,最后再按n的顺序整理输出:

from collections import defaultdict

n = [0,1,2,3]
b = [1,1,1,2,3,0,0,1,2]

result = defaultdict(list)
for idx, val in enumerate(b):
    result[val].append(idx)

# 按n的顺序输出
for num in n:
    print(f"{num}: {result[num]}")

这种方法代码更简洁,如果b中存在n以外的值,这些值会被自动存入字典但不会在最终输出里显示,适合处理b元素范围不确定的情况。

方法三:字典推导式+列表推导式(简洁写法)

用推导式一行构建结果字典,适合喜欢简洁代码的场景:

n = [0,1,2,3]
b = [1,1,1,2,3,0,0,1,2]

result = {num: [idx for idx, val in enumerate(b) if val == num] for num in n}

# 输出结果
for num in n:
    print(f"{num}: {result[num]}")

这种写法把逻辑压缩到字典推导式里,代码短但可读性稍弱,适合简单场景快速实现。

内容的提问来源于stack exchange,提问作者Chelsea Zou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:05:25