Python实现:为列表中不含'7'的字符串末尾添加'7'
问题解决:为不含'7'的字符串末尾添加'7'
问题描述
给定一个字符串列表,需要为其中不含字符'7'的字符串末尾添加'7'。例如输入['a7', 'g', 'u'],期望输出['a7','g7','u7'],但原代码运行后得到['a7', 'g', 'u', ['a77', 'g7', 'u7']],无法正确替换原列表中的旧值。
原代码问题分析
- 循环逻辑错误:遍历列表时,只要遇到第一个不含'7'的元素,就生成**所有元素都加'7'**的新列表,再用
append把这个新列表作为元素插入原列表并直接返回,导致原列表被嵌套修改,还错误地给已有'7'的字符串重复加'7'(比如'a7'变成'a77')。 - 修改方式错误:
append是往列表末尾添加新元素,不是替换原有元素,无法实现更新原列表项的需求。 - 默认参数隐患:Python中可变默认参数
list=[]会在多次调用时复用同一个列表,引发意外问题。
修正方案
方案1:返回新列表(推荐,不修改原输入)
这种方式生成符合要求的新列表,不会改动原输入列表,逻辑清晰且安全:
class Solution(object): def jazz(self, lst=None): # 修复可变默认参数问题 if lst is None: lst = [] # 列表推导式逐个处理元素 return [s + '7' if '7' not in s else s for s in lst]
方案2:原地修改原列表
如果需要直接修改原输入列表,可以遍历索引替换对应元素:
class Solution(object): def jazz(self, lst=None): if lst is None: lst = [] # 遍历索引,替换不符合要求的元素 for i in range(len(lst)): if '7' not in lst[i]: lst[i] = lst[i] + '7' return lst
测试代码
if __name__ == "__main__": p = Solution() lt = ['a7', 'g', 'u'] print(p.jazz(lt)) # 输出 ['a7', 'g7', 'u7']
内容的提问来源于stack exchange,提问作者user20502753
相关产品推荐
相关产品推荐

