Python:创建一个函数,该函数遍历列表并返回一个列表副本,其中删除了一个数字

2024-10-03 02:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单:

listInitial = [20, 33, 24, 11, 0, 4, 3, 11]

我试图编写一个函数,通过它进行迭代,并返回这个列表的一个副本,其中11个被删除。所需的输出为:[20, 33, 24, 0, 4, 3]

我想在函数中使用append方法和for循环。下面是我的代码:

listSecond = []

def iterateandremove (listInitial, num):
    for i in listInitial:
      if i != num:
        listSecond.append(i)
        print (listSecond)
    
    return (listSecond)


iterateandremove (listInitial, 11)

当我运行代码时,它会打印出正确的列表。但是我的函数根本不返回任何东西。我做错了什么


Tags: 方法函数代码in列表forifdef
3条回答

When I run the code it prints the correct list out. But my function doesn't return anything at all. What am I doing wrong?

这是因为您没有将其分配给变量。您还需要在函数中创建一个新容器,而不是使用全局变量。试试这个:

def iterate_and_remove(list_initial, num):
    list_second = []
    for i in list_initial:
        if i != num:
            list_second.append(i)

    return list_second

result = iterate_and_remove([1,2,3,4], 4)
print(result)

您也可以通过列表理解来完成此操作:

list_second = [i for i in list_initial if i != 11]

您应该在函数中定义listSecond,然后从那里返回它

这样,如果您多次运行它,您只返回您的输入列表,而不是之前的所有列表的组合

def iterateandremove (listInitial, num):
    listSecond = []
    for i in listInitial:
      if i != num:
        listSecond.append(i)
    
    return (listSecond)

removed = iterateandremove(listInitial, 11)
print(removed)
#[20, 33, 24, 0, 4, 3]

您也可以通过简单的列表理解来实现这一点,而无需声明listSecond

def iterateandremove(initial, num):
    return [n for n in initial if n != num]

另一种选择

listInitial = [20, 33, 24, 11, 0, 4, 3, 11]
def iterateandremove(listInitial, num):

    return list(filter((num).__ne__, listInitial))

print(iterateandremove(listInitial, 11))
[20, 33, 24, 0, 4, 3]

lambda函数也是一个很好的候选函数

listInitial = [20, 33, 24, 11, 0, 4, 3, 11]
def iterateandremove(listInitial, num):

    return list(filter(lambda digit: digit != num, listInitial))

print(iterateandremove(listInitial, 11))
[20, 33, 24, 0, 4, 3]

相关问题 更多 >