首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时差与时差

时差与时差
EN

Stack Overflow用户
提问于 2019-01-31 06:33:15
回答 2查看 88关注 0票数 1

当我尝试用for循环从列表中删除所有a时,下面是我的代码:

代码语言:javascript
复制
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)

它返回的是:

代码语言:javascript
复制
["b","b","b"]

当我使用while而不是for时,返回:

代码语言:javascript
复制
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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-31 06:37:42

您需要首先修复for循环,它应该是:

代码语言:javascript
复制
def remove_values_from_list(_list, val):
        for _val in _list:
            if _val == val:
                _list.remove(val)
        print(_list)

产出:

代码语言:javascript
复制
['b', 'b', 'b', 'c']

然后then循环也是如此:

代码语言:javascript
复制
def remove_values_from_list(_list, val):
    while(val in _list):
        _list.remove(val)
    print(_list)

remove_values_from_list(list5, "a")

产出:

代码语言:javascript
复制
['b', 'b', 'b', 'c']

编辑:

您应该将while循环修改得有点像:

代码语言:javascript
复制
while True:
    if val not in _list:
        break
    else:
        _list.remove(val)
print(_list)

编辑2:

谢谢@Dukeling给我的机会:

在使用for-loop迭代列表时,不能从列表中删除元素(连续元素)。对于它,我们可以迭代它的副本如下:

代码语言:javascript
复制
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") 

产出:

代码语言:javascript
复制
[]
票数 0
EN

Stack Overflow用户

发布于 2019-01-31 06:46:06

这是因为您在for循环中使用val,并且您的函数接收的参数也称为val

试着做这样的事情:

代码语言:javascript
复制
def remove_values_from_list(_list, val):
    for v in _list:
        if v == val:
            _list.remove(v)

更有效的方法是:

代码语言:javascript
复制
def remove_values_from_list(_list, val):
    return list(filter(lambda x: x!=val, _list ))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54454638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档