当我尝试用for循环从列表中删除所有a时,下面是我的代码:
list5 = ["a","b","a","b","a","b","c"]
def remove_values_from_list(_list, val):
for val in _list:
_list.remove(val)
remove_values_from_list(list5, "a")
print(list5)它返回的是:
["b","b","b"]当我使用while而不是for时,返回:
list5 = ["a","b","a","b","a","b","c"]
def remove_values_from_list(_list, val):
while val in _list:
_list.remove(val)
remove_values_from_list(list5, "a")
print(list5)
["b","b","b","c"]有人能解释一下为什么for循环不返回最后c吗?
发布于 2019-01-31 06:37:42
您需要首先修复for循环,它应该是:
def remove_values_from_list(_list, val):
for _val in _list:
if _val == val:
_list.remove(val)
print(_list)产出:
['b', 'b', 'b', 'c']然后then循环也是如此:
def remove_values_from_list(_list, val):
while(val in _list):
_list.remove(val)
print(_list)
remove_values_from_list(list5, "a")产出:
['b', 'b', 'b', 'c']编辑:
您应该将while循环修改得有点像:
while True:
if val not in _list:
break
else:
_list.remove(val)
print(_list)编辑2:
谢谢@Dukeling给我的机会:
在使用for-loop迭代列表时,不能从列表中删除元素(连续元素)。对于它,我们可以迭代它的副本如下:
def remove_values_from_list(_list, val):
for _val in _list[:]:
if _val == val:
_list.remove(_val)
print(_list)
list5 = ["a", "a"]
remove_values_from_list(list5, "a") 产出:
[]发布于 2019-01-31 06:46:06
这是因为您在for循环中使用val,并且您的函数接收的参数也称为val。
试着做这样的事情:
def remove_values_from_list(_list, val):
for v in _list:
if v == val:
_list.remove(v)更有效的方法是:
def remove_values_from_list(_list, val):
return list(filter(lambda x: x!=val, _list ))https://stackoverflow.com/questions/54454638
复制相似问题