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

如何用Pythonic方式对列表中两字符串间的整数求和?

混合类型列表中字符串间整数的求和合并实现

给定混合类型列表:

L = [1, "a", "b", 1, 2, 1, "d", 1, "e", 4, 5, "f", "g", 2]

需求是将两个字符串元素之间的所有整数求和合并,预期输出:

[1, "a", "b", 4, "d", 1, "e", 9, "f", "g", 2]

Pythonic实现方案:使用生成器函数

生成器是Python处理序列迭代的惯用方式,代码简洁且内存高效:

def merge_integers_between_strings(lst):
    current_sum = 0
    seen_first_str = False
    for item in lst:
        if isinstance(item, str):
            if seen_first_str:
                # 输出两个字符串间累加的整数(非零则输出)
                if current_sum != 0:
                    yield current_sum
                    current_sum = 0
            else:
                # 处理第一个字符串前的整数
                if current_sum != 0:
                    yield current_sum
                    current_sum = 0
                seen_first_str = True
            yield item
        else:
            # 累加整数
            current_sum += item
    # 处理列表末尾的剩余整数
    if current_sum != 0:
        yield current_sum

# 测试代码
L = [1, "a", "b", 1, 2, 1, "d", 1, "e", 4, 5, "f", "g", 2]
result = list(merge_integers_between_strings(L))
print(result)

代码逻辑说明

  • current_sum:维护当前需要累加的整数值,初始为0。
  • seen_first_str:标记是否已遇到第一个字符串,用于区分开头的整数(第一个字符串前)和字符串之间的整数。
  • 遍历每个元素:
    • 若为字符串:
      • 若已见过第一个字符串,说明之前的累加值是两个字符串之间的整数,非零则输出,随后输出当前字符串并重置累加器。
      • 若未见过第一个字符串,先输出开头的累加整数(非零则输出),标记状态为已见过字符串,再输出当前字符串。
    • 若为整数,直接累加到current_sum。
  • 遍历结束后,输出末尾剩余的累加整数(非零则输出)。

这段代码能准确处理所有边界情况:开头的独立整数、连续字符串(无中间整数)、末尾的独立整数,完全匹配预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:45:09