You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将二维网格宽度计算的嵌套循环写成单行代码?

如何将二维数组网格宽度计算的嵌套循环写成单行

嘿,我来帮你理清这个困惑!首先得说,你尝试用列表推导实现这个逻辑的思路没问题,但列表推导的语法规则限制了你这么写——它是用来生成列表元素的,没法直接在里面写width +=1这种赋值语句,也不能用break这种控制流命令,这就是你代码报错的原因。

先回顾一下你那行可行的代码逻辑:

width = 0
for row in grid:
    for col in row:
        width += 1
        break

这段代码的实际作用是:统计二维数组中非空行的数量(因为只有当行里有元素时,内层循环才会执行一次,给width加1后就跳出内层循环;空行的话内层循环根本不会跑,width不会增加)。

接下来给你两种单行实现的方案:

方案1:更Pythonic的表达式写法(推荐)

用生成器表达式配合sum()函数,一行完成统计,完全避开循环语句的嵌套:

width = sum(1 for row in grid if row)

这里的if row用来判断行是否非空,每遇到一个非空行就贡献一个1,最后sum把这些1加起来,结果和你原来的循环完全一致。

方案2:直接把原有循环写成单行

如果你只是想把原来的嵌套循环压缩成一行,Python允许用分号分隔多条语句,这样就能实现:

width = 0; for row in grid: for col in row: width += 1; break

这种写法完全保留了你原来的逻辑,只是把多行代码放到了一行里,适合想严格对应原有循环逻辑的场景。

最后再提醒一下:列表推导适合用来生成新的列表,而不是执行像变量累加这种带副作用的操作,所以以后遇到类似的统计需求,优先考虑sum()any()all()这类函数配合生成器表达式的写法,既简洁又符合Python的风格~

内容的提问来源于stack exchange,提问作者Benjamin Jones

火山引擎 最新活动