Python带计数器内外循环遍历列表 内循环执行3次后续跑外循环
问题根因
原有代码无法得到预期结果的核心问题有3个:
- 计数器
i为全局变量,第一次跑完前3个'A'的内循环后,i的值固定为3,后续遍历到'B'、后续组'A'时,i<3的判断永远不成立,内循环不会触发 - 没有连续同值块的识别逻辑,不会在元素值切换、进入新的连续同值块时重置计数器
- 外层逐元素遍历的判断逻辑冗余,内循环固定执行3次的逻辑不需要对每个列表元素都做一次触发判断
正确实现代码
strings = ['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B',\ 'A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B'] prev_char = None for current_char in strings: # 识别到新的连续同值块 if current_char != prev_char: # 块之间输出空行,匹配预期格式,首个块前不输出空行 if prev_char is not None: print() # 块级计数器重置,执行固定3次的内循环 count = 0 while count < 3: print(current_char, count) count += 1 prev_char = current_char
运行效果
执行上述代码后输出完全匹配预期:
A 0 A 1 A 2 B 0 B 1 B 2 A 0 A 1 A 2 B 0 B 1 B 2
逻辑说明
- 仅在检测到连续同值块切换时触发一次内循环,不需要对每个列表元素重复做计数器判断,执行效率更高
- 计数器为块级局部变量,每次进入新块自动重置,不会出现全局变量值锁死无法触发内循环的问题
- 空行判断仅在两个相邻块之间生效,不会出现首尾多余空行的格式问题
内容的提问来源于stack exchange,提问作者mutt.dropbox
相关产品推荐
相关产品推荐

