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

如何在Python推导式中结合if语句实现变量递增?

解决Python推导式中统计满足条件元素的问题

嘿,我来帮你搞定这个推导式的问题~首先得理清你代码里的两个核心问题:

为什么当前代码返回一堆0?

你现在的列表推导式是每次满足条件时,就把count的当前值(一直是0)添加到新列表里,所以最后得到的是一个全是0的列表,而不是你想要的计数结果。而且你最后返回的是这个列表,不是count变量本身,这也偏离了你的目标。

为什么count +=1会报SyntaxError?

Python的列表推导式里,元素位置只能放表达式(能返回值的代码),而count +=1是个赋值语句,不属于表达式范畴,所以语法上不允许这么写。推导式的设计初衷是生成新序列,不是用来执行修改外部变量这种“副作用”操作的。


正确的解决方法

其实根本不需要手动维护count变量,我们可以直接统计满足条件的元素数量,这里有几种更简洁高效的方式:

方法1:用列表推导式生成符合条件的元素,再取长度

# 注意:不要用list当变量名,会覆盖Python内置的list类型
my_list = [1,2,4,5,7,8,10]
d = 3
# 生成所有满足条件的x的列表,再取长度就是计数
count = len([x for x in my_list if (x + d in my_list) and (x + 2*d in my_list)])
return count

方法2:用生成器表达式+sum()(更节省内存)

如果你的列表很大,生成器表达式不需要创建完整的列表,直接逐个计算,性能更优:

my_list = [1,2,4,5,7,8,10]
d = 3
# 满足条件时返回1,sum把所有1加起来就是总个数
count = sum(1 for x in my_list if (x + d in my_list) and (x + 2*d in my_list))
return count

优化:用集合加速in操作

列表的in操作是O(n)时间复杂度,把列表转成集合后,in操作变成O(1),大列表下速度会快很多:

my_list = [1,2,4,5,7,8,10]
d = 3
my_set = set(my_list)
count = sum(1 for x in my_list if (x + d in my_set) and (x + 2*d in my_set))
return count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:19