【问题标题】:Removing items from the list that are not in the tuple从列表中删除不在元组中的项目
【发布时间】:2015-03-16 06:19:46
【问题描述】:

编写并测试 Python 函数 leppard 以遍历 zoo_list 并删除不在 zoo_dictionary 中的任何项目。使用以下元组作为字典:

(“狮子”、“老虎”、“熊”、“chupacabra”、“长颈鹿”、“树懒”)

n = int(input("Enter the number of animals: "))
zoo_list = []
zoo_dictionary = ( "lion", "tiger", "bear", "chupacabra", "giraffe", "sloth" )
for i in range(n):
    lists = input("Enter the names of each animal: ")
    zoo_list.append(lists)


for i in range(n-1):
    if zoo_list[i] not in zoo_dictionary:
        zoo_list1 = zoo_list.pop(i)

打印(动物园列表)

这是我的代码,但是当我输入“cat”“dog”“lion”“bear”“monkey”时 我的列表显示 ["dog","lion","bear"] 有什么理由吗?请,谢谢你:)

【问题讨论】:

  • 您有以下解决方案,但获取它们的方法是例如在调试器中检查zoo_listzoo_list1 的值。这应该给你一个提示是怎么回事。也就是说,“字典”已经是错误的类型,它应该是一个集合:zoo = {'dingo', 'mouse', 'hedgehog'}
  • 这类问题确实适合使用列表推导(或生成器表达式)来解决。在这种情况下,zoo_list 中不在zoo_dictionary 中的元素列表是[x for x in zoo_list if x not in zoo_dictionary]。我认为它的美妙之处(除了简洁之外)几乎读起来像英语。

标签: python list


【解决方案1】:

当 i 的值为 0 时,在第二个 for 循环的第一次迭代中, 当你这样做的时候

zoo_list1 = zoo_list.pop(i)

列表中索引 0 处的元素被删除。现在列表变成了

["dog", "lion", "bear", "monkey"]

现在循环继续,在循环的第二次迭代中,i 的值为 1,在新列表(在第一次迭代后形成)中,索引 1 处的元素是“lion”。因此,您缺少“狗”元素。

你所说的字典实际上是一个集合,而不是字典。

【讨论】:

    【解决方案2】:

    正如在其他答案之一中提到的那样,改变您尝试迭代的列表是灾难的根源。相反,构建一个新列表,然后将该列表分配给zoo_list

    n = int(input("Enter the number of animals: "))
    zoo_list = []
    zoo_dictionary = ("lion", "tiger", "bear", "chupacabra", "giraffe", "sloth")
    for i in range(n):
        zoo_list.append(input("Enter the names of each animal: "))
    
    zoo_list = [animal for animal in zoo_list if animal in zoo_animals]
    print(zoo_list)
    

    我已经删除了对lists 变量的不必要赋值。我还删除了您错误的 for 循环并将其替换为列表理解。如果你还想使用 for 循环,你会做这样的事情

    temp = []
    for animal in zoo_list:
        if animal in zoo_dictionary:
            temp.append(animal)
    zoo_list = temp
    

    您也可以使用内置函数filter。将列表推导式或 for 循环(无论您使用哪种方法)替换为以下内容。

    zoo_list = filter(lambda x : x in zoo_animals, zoo_list)
    

    你会得到同样的结果。

    【讨论】:

      【解决方案3】:

      我认为您应该在此处使用 while 循环。这是 Python 2 的代码。

          n = int(input("Enter the number of animals: "))
          zoo_list = []
          zoo_dictionary = ( "lion", "tiger", "bear", "chupacabra", "giraffe", "sloth" )
      
          while len(zoo_list) < n:
              item = input("Enter the names of each animal: ")
              zoo_list.append(item)
      
          print zoo_list, len(zoo_list)
          for i in range(n-1):
              if zoo_list[i] in zoo_dictionary:
                  zoo_list.remove(zoo_list[i])
      
          print zoo_list
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-20
        • 2018-02-03
        相关资源
        最近更新 更多