编写并测试Python函数leppard以浏览zoo_list并删除任何不在zoo_dictionary中的项目。使用以下元组作为字典:
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”时 我的清单显示[“狗”,“狮子”,“熊”] 有什么理由吗?拜托,谢谢你:)
答案 0 :(得分:1)
zoo_list1 = zoo_list.pop(i)
删除列表中索引0处的元素。现在列表变为
["dog", "lion", "bear", "monkey"]
现在循环继续,并且在循环的第二次迭代中,i的值为1,并且在新列表(在第一次迭代之后形成)中,索引1处的元素是" lion"。因此,你错过了元素" dog"。
你所说的字典实际上是一套,而不是字典。
答案 1 :(得分:0)
正如其他一个答案中所提到的那样,改变你试图迭代的列表是一种灾难。而是构建一个新列表,然后将该列表分配给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)
你会得到相同的结果。
答案 2 :(得分:-1)
我认为你应该在这里使用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