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

如何将统计邮件大写词的双层for循环合并为列表推导式?

把双层循环转为列表推导式的方案

嘿,我来帮你把这段双层循环重构为更简洁的列表推导式!先理清楚你的原函数逻辑:你要遍历每一组邮件线程(data里的每个元素),统计每个线程内的大写相关数量(要么是所有单词里的大写字母总数,要么是全大写的单词数),最后把每个线程的统计结果汇总成列表返回。

情况1:统计每个线程中所有单词的大写字母总数

如果你的原代码是统计每个单词里的大写字母,再累加每个线程的总数,那可以直接把两层循环合并成下面的列表推导式:

def get_capital_prop(data):
    return [sum(sum(1 for c in word if c.isupper()) for word in thread) for thread in data]

这里的思路很清晰:

  • 外层直接遍历data里的每个邮件线程thread,代替原代码里for i in range(len(data))这种不够直观的索引遍历
  • 内层对线程里的每个word,统计其中大写字母的数量,再把这些数值求和,得到当前线程的总大写字母数
  • 整个表达式直接生成最终的结果列表,省去了原代码里的临时变量count和手动append操作

情况2:统计每个线程中全大写的单词数量

如果你的需求是统计每个线程里全大写的单词(比如"THIS"这种,而非"This"),那推导式会更简洁:

def get_capital_prop(data):
    return [sum(1 for word in thread if word.isupper()) for thread in data]

这个写法直接对每个线程里的单词做判断,统计符合全大写条件的单词数量,一步生成结果列表。

额外优化提示

原代码里的temp变量看起来没有被用到,可以直接删掉,避免冗余。另外,用直接遍历元素的方式代替索引遍历,会让代码更易读也更符合Python的惯用风格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:55:19