如何将嵌套循环计数逻辑转换为Python单行循环?
把嵌套循环计数改成Python单行的方法
嘿,这事儿简单!要将你那段嵌套循环的计数逻辑压缩成Python单行,列表推导式+生成器表达式就是完美的解决方案,完全和你原来的逻辑等价,还更简洁。
先拆解下你原来的逻辑:遍历外层可迭代对象的每个元素,对内层可迭代对象的元素做条件判断,统计符合条件的数量,再把每个统计结果存入counts列表。
对应的单行写法模板是这样的:
counts = [sum(1 for inner_item in inner_iterable if condition) for outer_item in outer_iterable]
举个实际例子更清楚
假设你原来的代码是统计每个子列表里的偶数个数:
counts = [] for sublist in [[1,2,3], [4,5,6], [7,8,9]]: count = 0 for num in sublist: if num % 2 == 0: count += 1 counts.append(count)
改成单行就是:
counts = [sum(1 for num in sublist if num % 2 == 0) for sublist in [[1,2,3], [4,5,6], [7,8,9]]]
运行后counts的值是[1, 2, 2],和原来的代码结果完全一致。
为什么这么写?
- 内层的
sum(1 for inner_item in inner_iterable if condition):每遇到一个符合条件的元素就生成一个1,用sum把这些1加起来,本质就是统计符合条件的元素数量,比手动初始化count再累加要更Pythonic。 - 外层的列表推导式:负责遍历外层的每个元素,把对应的内层统计结果依次收集到
counts列表里。
如果你的条件判断逻辑比较复杂,还可以把它抽成单独的函数,让代码更易读:
def is_even(num): return num % 2 == 0 counts = [sum(1 for num in sublist if is_even(num)) for sublist in [[1,2,3], [4,5,6], [7,8,9]]]
内容的提问来源于stack exchange,提问作者Durai Sankaran
相关产品推荐
相关产品推荐

