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

如何使用列表推导式统计高低配对的数量?

如何用列表推导式实现两个列表对应元素的计数统计?

你的代码报错核心原因是:列表推导式内部只能放置表达式,而at+=1是赋值语句,不属于表达式范畴,因此Python会判定为语法错误。

最优解决方案:用生成器表达式配合sum

没必要用列表推导式(会生成无用列表浪费内存),直接用生成器表达式结合sum函数就能简洁实现统计,这也是更Pythonic的写法:

a = [47, 67, 22]
b = [26, 47, 12]

# 统计a中元素大于b对应元素的次数
at = sum(1 for x, y in zip(a, b) if x > y)
# 统计a中元素小于b对应元素的次数
bt = sum(1 for x, y in zip(a, b) if x < y)

print(at, bt)  # 输出:2 1

原理:生成器表达式遍历zip(a,b)的每一组元素,当满足条件时生成1,sum函数将这些1累加,直接得到计数结果。

若非要用列表推导式(不推荐)

如果坚持要用列表推导式,可借助Python 3.8+支持的海象运算符:=(它能将赋值操作转为表达式),但会生成无意义的列表,可读性也较差:

a = [47, 67, 22]
b = [26, 47, 12]

at, bt = 0, 0
# 用下划线接收无用的列表
_ = [at := at+1 if x>y else bt := bt+1 if x<y else None for x, y in zip(a, b)]

print(at, bt)  # 输出:2 1

原代码的冗余优化点

你原来的循环里[c for c in zip(a, b)]是多余的,zip(a,b)本身就是可迭代对象,直接遍历即可:

for x, y in zip(a, b):
    if x > y:
        at +=1
    elif x < y:
        bt +=1

内容的提问来源于stack exchange,提问作者Johnny John Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:43:15