Python编写deletePerson函数删除列表元素返回None问题求助
问题解决:Python实现deletePerson函数返回None的问题
我正在学习Python,需要完成练习:实现deletePerson函数,从列表中删除指定人员并返回不含该人员的新列表。但编写的两段代码均返回None,代码如下:
第一段代码
people = ['juan','ana','michelle','daniella','stefany','lucy','barak',"emilio"] def deletePerson(person_name): new_people = [] for i in range(0, len(people)): if people.index(person_name): new_people = people.remove(person_name) return new_people print(deletePerson("daniella")) print(deletePerson("juan")) print(deletePerson("emilio"))
第二段代码
people = ['juan','ana','michelle','daniella','stefany','lucy','barak',"emilio"] #Your code go here: def deletePerson(person_name): new_people = [] for i in range(0, len(people)): if person_name in people: new_people = people.remove(person_name) return new_people print(deletePerson("daniella")) print(deletePerson("juan")) print(deletePerson("emilio"))
我尝试用index()查找元素再调用remove(),也试过判断元素是否在列表中,均未得到预期结果,求解决方法。
问题原因分析
list.remove()返回值为None:remove()是原地修改列表的操作,它只会改变原列表,不会返回修改后的列表,所以你把它赋值给new_people后,得到的自然是None。- 冗余的循环与判断:两段代码里的
for循环和if判断没有实际作用,既没有正确缩进执行逻辑,也没有帮助生成新列表,属于无效代码。 - 全局列表被修改的副作用:代码直接修改了全局的
people列表,多次调用函数后原列表会持续变化,导致后续调用结果不符合预期。
正确实现方法
方法1:生成新列表(推荐,不修改原列表)
遍历原列表,将不等于目标名字的元素加入新列表,返回这个新列表:
people = ['juan','ana','michelle','daniella','stefany','lucy','barak',"emilio"] def deletePerson(person_name): new_people = [] for name in people: if name != person_name: new_people.append(name) return new_people print(deletePerson("daniella")) print(deletePerson("juan")) print(deletePerson("emilio"))
也可以用列表推导式简化代码:
def deletePerson(person_name): return [name for name in people if name != person_name]
方法2:复制原列表后修改(避免修改全局列表)
如果一定要用remove(),需要先复制原列表,在副本上操作后返回副本:
def deletePerson(person_name): new_people = people.copy() # 也可以用new_people = list(people) if person_name in new_people: new_people.remove(person_name) return new_people
内容的提问来源于stack exchange,提问作者Ndavlo
相关产品推荐
相关产品推荐

