Python实现列表元素按索引交错拼接字符串的问题排查
问题分析
你的代码存在以下几个明显问题:
- 索引判断逻辑错误:字符串有效索引范围是
0 到 len(字符串)-1,你的判断条件i <= len(source)会导致取到等于字符串长度的索引值,触发越界错误,即使因为浮点数逻辑侥幸运行也会取到错误字符。 - 索引计数逻辑不合理:使用浮点数累加
1/len(sources)的方式计数,不仅写法不规范,还会存在浮点数精度误差,多次累加后int(i)的取值会和预期的整数索引出现偏差。 - 存在冗余代码:内层
for char in source循环没有任何实际作用,进入循环后会直接break,完全可以删除。 - 增量逻辑混乱:
i的增量写在单条字符串处理的分支中,如果某条字符串长度不够跳过处理,会导致i的增长节奏不符合预期。
修正方案
直接使用整数作为当前遍历的索引位,逻辑清晰且不会有精度问题,修正后的代码如下:
def lazy_scribe(sources: list): result = '' # 先计算所有字符串的最大长度,确定遍历的总轮次 max_len = max(len(s) for s in sources) for k in range(max_len): # 每一轮遍历所有字符串,取当前索引位的字符,存在就拼接 for source in sources: if k < len(source): result += source[k] return result sources = ["python", "java", "golang"] print(lazy_scribe(sources)) # 输出结果为:pjgyaotvlhaaonng
修正后代码的运行结果和预期一致,第7位字符为t。
内容的提问来源于stack exchange,提问作者python_newbie
相关产品推荐
相关产品推荐

