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为例:
- 程序会匹配到索引0(山地/丘陵)、索引4(寒冷)两个子列表
- 合并元素剔除
silver后,去重的候选池为amethyst, crystal, copper, red, white - 最终会从这5个值里随机返回一个,完全符合需求。
内容的提问来源于stack exchange,提问作者trapbuilder2
相关产品推荐
相关产品推荐

