【问题标题】:Python: Create function that iterates through list and returns a copy of list with a number removedPython:创建遍历列表并返回删除数字的列表副本的函数
【发布时间】:2021-01-21 00:19:03
【问题描述】:

我有以下清单:

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 = []
  • 您确定它首先会返回任何内容吗?我试过你的代码,它似乎工作。
  • 你的函数正在返回一些东西。您没有对返回值做任何事情(既不将其存储到名称,也不打印它)。你没有告诉我们你期待什么或者发生了什么是错误的(尽管在函数外部定义的listSecond 几乎肯定是错误的,并且print 不应该出现在生产代码中)。跨度>

标签: python list function for-loop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    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]
    

    【讨论】:

    • OP 做了 return list_second,所以他们实际上做了return 一些事情。
    • @ShadowRanger 我更新了我的回复。问题是他们没有将函数调用的结果分配给任何东西。
    【解决方案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]
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:
        def iterateandremove(listInitial, num):
            return [n for n in listInitial if n != num]
        
        listInitial = [20, 33, 24, 11, 0, 4, 3, 11]
        print(iterateandremove(listInitial, 11))
        

        如果您使用的是 python3,列表推导会像上面的代码一样为您完成工作。

        如果您使用的是python2,我建议您改用python3,有关详细信息,请参阅https://www.python.org/doc/sunset-python-2/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-12
          • 2020-07-18
          • 1970-01-01
          • 1970-01-01
          • 2015-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多