Python多列表随机抽取匹配失败列表的实现问题求助
问题分析
你当前的代码只对第一个列表的随机元素做了判断,没有处理后续列表的分支逻辑,而且提前一次性选好了所有列表的随机元素,这不符合“依次从列表随机抽取、直到命中失败列表元素”的需求。
解决方案
我们可以把需要检查的列表按顺序整理成一个集合,然后依次遍历每个列表,每次从当前列表随机抽取元素进行匹配,直到找到失败列表中的元素为止。
基础版本:按顺序遍历一次列表,直到命中
import random # 待检查的列表(按顺序排列) check_lists = [ ['thor', 'batman', 'spiderman', 'superbart'], # action_heros ['joey', 'feebee', 'rachael', 'dog'], # friends ['robin', 'marshall', 'ted', 'lily', 'barney'] # himym ] # 失败列表 fail_list = ['bart', 'homer', 'marg', 'superbart', 'dog', 'barney'] # 按顺序遍历每个列表 for idx, current_list in enumerate(check_lists): # 从当前列表随机选一个元素 random_item = random.choice(current_list) if random_item in fail_list: # 命中失败列表,输出信息并终止流程 list_names = ["actionheros", "friends", "himym"] print(f'failed at {list_names[idx]}') break else: # 所有列表遍历完都没命中失败列表 print("所有列表遍历后未命中失败元素")
循环版本:反复按顺序遍历列表,直到命中
如果需要反复循环整个列表序列,直到抽到失败元素,可以在外层加一个while循环:
import random check_lists = [ ['thor', 'batman', 'spiderman', 'superbart'], ['joey', 'feebee', 'rachael', 'dog'], ['robin', 'marshall', 'ted', 'lily', 'barney'] ] fail_list = ['bart', 'homer', 'marg', 'superbart', 'dog', 'barney'] list_names = ["actionheros", "friends", "himym"] while True: for idx, current_list in enumerate(check_lists): random_item = random.choice(current_list) if random_item in fail_list: print(f'failed at {list_names[idx]}') exit() # 终止程序
关键改进点
- 将待检查列表按顺序存入一个大列表,通过循环实现依次处理,避免重复写冗余代码
- 每次处理当前列表时才随机抽取元素,而不是提前一次性抽取所有列表的元素
- 使用
enumerate获取列表索引,方便对应输出列表名称 - 循环版本通过
while True实现反复遍历,直到命中失败元素
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

