如何用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
相关产品推荐
相关产品推荐

