python 从列表中删除项时意外退出循环

mepcadol  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(104)

我试图创建一个函数,从列表中删除某个字符(n)的所有示例。这是我的代码:

def removeall(alist,n):
    size=len(alist)
    for x in range(size):
        if x is n:
            alist.remove(x)
        else:
            x = x

这适用于第一个匹配n的项目,但随后它似乎退出了循环,我不明白为什么。例如,如果alist=[1,2,3,1]并且n=1,我希望它返回[2,3],但它会返回[2,3,1]。经过大量测试,它基本上只是删除了第一个匹配n,然后退出,我不知道为什么,我知道我在做一些愚蠢的事情,但我不知道。
我试过使用函数而不是方法,并以不同的方式定义列表,但结果总是一样的。我知道我一定是在方法“alist.remove(x)”上做错了什么,但我不知道如何在它将一个字符匹配到n并删除它之后保持它的迭代。

tcomlyy6

tcomlyy61#

def removeall(alist,n):
    return [x for x in alist if x != n]

def removeall(alist,n):
    size=len(alist)
    for x in range(size-1, -1, -1):
        if alist[x] is n:
            alist.remove(alist[x])

remove方法参数是值而不是索引。当循环应该以相反的顺序进行时删除。

qhhrdooz

qhhrdooz2#

你可以这样做是错误的:

def removeall(alist, n):
    for x in alist:
        if x is n:
            alist.remove(n)

相关问题