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

Python:创建一个函数,该函数遍历列表并返回一个列表副本,其中删除了一个数字,python,list,function,for-loop,Python,List,Function,For Loop,我有以下清单: 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

我有以下清单:

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)

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

您应该在函数中定义
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]

您应该在函数中定义
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]
当我运行代码时,它会打印出正确的列表。但是我的函数根本不返回任何东西。我做错了什么

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

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

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

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]
def iterateandremove(listInitial,num):
返回[n如果n!=num,则在listInitial中为n返回n]
listInitial=[20,33,24,11,0,4,3,11]
打印(迭代删除(列表首字母,11))
如果您使用的是python3,那么列表理解将像上面的代码一样为您完成工作

如果您使用的是python2,我建议您改用python3,有关更多详细信息,请参阅

def iterateandremove(listInitial,num):
返回[n如果n!=num,则在listInitial中为n返回n]
listInitial=[20,33,24,11,0,4,3,11]
打印(迭代删除(列表首字母,11))
如果您使用的是python3,那么列表理解将像上面的代码一样为您完成工作

如果您使用的是python2,我建议您改用python3,有关更多详细信息,请参阅另一种选择

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]
另一种选择

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]

一切似乎都正常,函数返回的列表没有11

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

一切似乎都正常,函数返回的列表没有11

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

为什么函数本身没有
listSecond=[]
你确定它首先返回了什么吗?我尝试了你的代码,它似乎工作了。你的函数正在返回一些东西。您没有对返回值执行任何操作(既没有将其存储到名称中,也没有打印它)。您还没有告诉我们您期望的是什么,或者发生的事情是如何出错的(尽管在函数外部定义的
listSecond
几乎肯定是错误的,并且
print
不应该出现在生产代码中)。为什么您没有
listSecond=[]
在函数本身中,您确定它首先返回了什么吗?我尝试了你的代码,它似乎工作了。你的函数正在返回一些东西。您没有对返回值执行任何操作(既没有将其存储到名称中,也没有打印它)。您没有告诉我们您期望的是什么,或者发生的事情是如何出错的(尽管在函数外部定义的
listSecond
几乎肯定是错误的,并且
打印的
不应该出现在生产代码中)。OP确实返回了list\u second
,所以他们确实返回了一些东西。@ShadowRanger我更新了我的回答。问题是他们没有将函数调用的结果分配给任何东西。OP第二次返回了列表,所以他们确实返回了一些东西。@ShadowRanger我更新了我的回答。问题是他们没有将函数调用的结果分配给任何对象。