Python中如何在列表的每个指定单词后添加新单词?
在列表每个指定单词后插入指定元素的问题解决
需求说明
原列表:
original_list = ['add', 'add', 'ball', 'cup', 'add']
预期结果:
['add','Nice', 'add', 'Nice', 'ball', 'cup', 'add','Nice']
原有代码的问题分析
第一段代码
for word in list: if 'add' in word: list.insert(((list.index(word))+1,'Nice')
list.index(word)只会返回第一个匹配'add'的元素索引,所有'add'都会被定位到同一个位置,插入后列表长度增加,循环基于初始迭代器持续执行,最终陷入无限循环。- 存在语法错误:
insert的参数格式应为(索引, 元素),此处括号嵌套错误。
第二段代码
for word in list: if 'add' in word: local = list.index(word) + 1 if list[local] == 'Nice': pass else: list.insert(local,'Nice')
- 核心问题依然是
list.index(word)始终返回第一个'add'的索引,后续的'add'触发判断时,local指向的还是第一个'add'的下一位,该位置已存在'Nice',因此直接跳过,导致后面的'add'无法被处理。
正确解法
方法一:创建新列表(推荐)
遍历原列表,遇到目标元素时同时添加原元素和指定元素,否则仅添加原元素。这种方法不修改原列表,逻辑简单不易出错。
original_list = ['add', 'add', 'ball', 'cup', 'add'] new_list = [] for item in original_list: new_list.append(item) if item == 'add': new_list.append('Nice') print(new_list) # 输出:['add', 'Nice', 'add', 'Nice', 'ball', 'cup', 'add', 'Nice']
方法二:倒序遍历修改原列表
如果必须修改原列表,可采用倒序遍历索引的方式。倒序处理时,插入元素的位置在当前索引之后,不会影响未处理的前面元素的索引,避免遍历混乱。
original_list = ['add', 'add', 'ball', 'cup', 'add'] # 从最后一个索引倒序遍历到0 for i in range(len(original_list)-1, -1, -1): if original_list[i] == 'add': original_list.insert(i+1, 'Nice') print(original_list) # 输出:['add', 'Nice', 'add', 'Nice', 'ball', 'cup', 'add', 'Nice']
内容的提问来源于stack exchange,提问作者Kolarovic
相关产品推荐
相关产品推荐

