如何在字符串每个字符前添加对应短语?解决IndexError问题
解决列表赋值索引越界问题并实现字符前加对应短语的需求
问题场景
需要给输入字符串(如"ABCD")的每个字符前依次添加对应短语(如("0", "1", "2", "3")),最终得到结果"0A1B2C3D"。你编写的代码运行时抛出IndexError: list assignment index out of range错误,以下是问题分析和解决方法:
错误原因
你的代码存在两个核心问题:
- 循环内重复初始化空列表:每次循环都执行
combined = [],导致列表始终是空的,此时直接通过combined[i]赋值会因为列表没有对应索引而报错。 - 非法使用
return:return只能在函数内部使用,全局代码中用它会触发语法错误。
修正后的代码
基础修正版本
text = input() if len(text) > 4: print("输入字符串长度不能超过4") exit() phrases = ["0", "1", "2", "3"] combined = [] for i in range(len(text)): combined.append(phrases[i] + text[i]) # 将列表拼接为最终字符串 result = ''.join(combined) print(result)
更简洁的优化版本
利用zip函数同时遍历短语和字符串字符,代码更简洁高效:
text = input() if len(text) > 4: print("输入字符串长度不能超过4") exit() phrases = ["0", "1", "2", "3"] result = ''.join(p + c for p, c in zip(phrases, text)) print(result)
关键修正点说明
- 将
combined = []移到循环外部,确保列表可以持续累积元素。 - 使用
append()方法向列表添加元素,避免直接给未初始化的索引赋值。 - 用
exit()替代return处理输入过长的情况,符合全局代码的语法规则。 - 用列表替代字典存储短语,因为索引和值是顺序对应关系,列表访问更直接高效。
zip函数可以将两个可迭代对象的元素一一配对,简化遍历逻辑。
内容的提问来源于stack exchange,提问作者yes
相关产品推荐
相关产品推荐

