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

如何将Python中places变量的双层for循环转换为列表推导式

解决方案

你的双层循环核心是遍历wins中的每个获胜组合,把组合里每个位置对应的board值拼接成字符串,再收集到places列表里。用列表推导式可以直接实现这个逻辑,而且不需要临时变量temp:

places = [''.join(board[i] for i in percorre_wins) for percorre_wins in wins]

逻辑拆解:

  • 外层推导:遍历wins中的每个元组percorre_wins,对应原来的外层for循环
  • 内层用生成器表达式board[i] for i in percorre_wins,遍历当前获胜组合里的每个位置i,取出board[i]的值,对应原来的内层for循环
  • 用''.join(...)把生成器里的字符拼接成完整字符串,替代原来的temp累加操作

你之前尝试的[temp+=board[i] for _ in wins]错误的原因是:列表推导式不允许在表达式里使用赋值操作(+=属于赋值),而且也没处理内层循环的逻辑。

替换后的完整函数代码:

def win_check(board, mark):
    wins = ((1,2,3),(4,5,6),(7,8,9),(7,4,1),(8,5,2),(9,6,3),(7,5,3),(9,5,1))
    places = [''.join(board[i] for i in percorre_wins) for percorre_wins in wins]
    return mark*3 in places

另外还可以进一步简化,直接在判断里使用生成器表达式,连places变量都省了,效率更高(不需要生成完整列表,找到匹配就停止):

def win_check(board, mark):
    wins = ((1,2,3),(4,5,6),(7,8,9),(7,4,1),(8,5,2),(9,6,3),(7,5,3),(9,5,1))
    return any(''.join(board[i] for i in combo) == mark*3 for combo in wins)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:15:43