井字棋开发:如何判断玩家输入包含嵌套列表中的赢局组合?
井字棋赢局判断问题解决方案
问题根源
你写的set(a).issubset(b)会触发TypeError,因为列表是不可哈希类型,无法直接将嵌套列表a转换为集合。
正确实现方式
要判断玩家输入列表b是否包含任意一个赢局组合,只需按以下逻辑处理:
- 将玩家输入
b转为集合(集合天然忽略元素顺序,且子集判断效率更高) - 遍历赢局列表
a中的每个子组合,将其转为集合后,检查是否是b集合的子集 - 只要有一个赢局组合满足条件,就返回
True
代码示例
a = [[1, 3, 4],[1,7,9]] b = [1, 7, 0, 9] b_set = set(b) # 用any()遍历赢局组合,找到第一个符合条件的就停止 is_win = any(set(win_comb).issubset(b_set) for win_comb in a) print(is_win) # 输出: True
额外说明
any()函数会短路求值,一旦找到满足条件的赢局组合就立即终止遍历,避免不必要的计算- 集合的
issubset()方法完美匹配需求:只要赢局的所有元素都存在于玩家输入中,无论顺序和额外元素多少,都会返回True
内容的提问来源于stack exchange,提问作者jennie
相关产品推荐
相关产品推荐

