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

Python如何根据输入从二维数组匹配子列表随机选取其他元素

实现方案

直接按逻辑分步处理即可,用Python标准库的random模块就能完成:

  • 遍历二维数组HabitatGroups,筛选出所有包含用户输入龙种的子列表
  • 合并所有匹配子列表的元素,剔除和输入值相同的项,可按需选择是否去重
  • 从最终的候选列表中随机抽取一个结果

记得做输入不存在的兜底判断,避免候选池为空触发运行错误

完整可运行代码

import random

HabitatGroups = [
    ["amethyst","silver","crystal","copper","red"],  # mountain/hill
    ["black","gold","green"],  # swamp/forest
    ["amethyst","blue","bronze","gold","topaz"],  # water adjacent
    ["blue","brass","copper"],  # warm dry
    ["white","crystal","silver"],  # cold
    ["sapphire","emerald","crystal","amethyst","blue"]  # underground
]

x = input("Choose a type of dragon: ").strip()

# 筛选所有包含输入龙种的分组
matched_groups = [group for group in HabitatGroups if x in group]

if not matched_groups:
    print(f"Error: 不存在龙种「{x}」的匹配分组,请检查输入")
else:
    candidates = []
    for group in matched_groups:
        # 把当前组里不等于输入值的元素加入候选池
        candidates.extend([dragon for dragon in group if dragon != x])
    
    # 两种候选池处理方式二选一即可:
    # 1. 去重处理:每个关联龙种被选中概率相等,符合「元素范围」的选取要求
    candidates = list(set(candidates))
    # 2. 不去重:在多个分组同时出现的龙种,被选中的概率会更高
    # candidates = candidates

    selected = random.choice(candidates)
    print(f"随机选取的关联龙种为: {selected}")

效果验证

以你举的输入silver为例:

  1. 程序会匹配到索引0(山地/丘陵)、索引4(寒冷)两个子列表
  2. 合并元素剔除silver后,去重的候选池为amethyst, crystal, copper, red, white
  3. 最终会从这5个值里随机返回一个,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:27:19