Python中如何在随机生成位置组合时排除指定组合?
解决随机位置生成中的特定组合排除问题
你需要做的就是循环生成组合,直到得到不在排除列表里的有效组合,另外注意一个关键细节:你的corner_pos里存的是字符串类型(比如'1'),但原排除列表exclusion里的第二个元素是整数1,这会导致判断永远不匹配,得先把排除列表里的数字改成字符串,统一元素类型。
另外,把排除列表转换成集合(set)会让判断效率更高,尤其是当排除项数量多的时候,集合的成员检查速度远快于列表。
修改后的完整代码如下:
import random centre_pos = ['A','B','C','D','E'] corner_pos = ['1','2','3','4'] # 修正类型,把数字改成字符串,和corner_pos的元素类型统一 exclusion = {('B', '1'), ('C', '2'), ('D', '3'), ('E', '4')} def position_generator(): while True: random_centre = random.choice(centre_pos) random_corner = random.choice(corner_pos) current_combination = (random_centre, random_corner) # 检查当前组合是否不在排除集合里 if current_combination not in exclusion: return random_centre, random_corner
代码说明:
- 用
while True做无限循环,直到生成符合要求的组合才返回结果 - 将
exclusion转为集合,大幅提升in操作的判断效率 - 统一了排除组合的元素类型,避免因类型不匹配导致的判断失效
- 每次生成组合后直接检查是否合规,不合规则继续循环生成
你的场景里总共有20种可能组合,仅排除4种,有效组合占比很高,无需担心极端情况下的无限循环问题。
内容的提问来源于stack exchange,提问作者AMeng
相关产品推荐
相关产品推荐

