【问题标题】:Basic "for" loop question to append elements from one list to another将元素从一个列表附加到另一个列表的基本“for”循环问题
【发布时间】:2021-10-22 20:05:20
【问题描述】:

我正在尝试使用for 循环将animals 的所有内容清空到pets。可能有一个简洁的代码,但我想了解我在下面的 3 个代码中哪里出错了。

第一个代码

animals = ['cat','dog','donkey','mouse','pig']
pets=[]
print(animals)
print(pets)
for value in animals:
    animals.pop()=value
    pets=pets.append(value)
print(animals)
print(pets)

第二个代码

animals = ['cat','dog','donkey','mouse','pig']
pets=[]
print(animals)
print(pets)
for value in animals:
    value=aniamls.pop()
    pets=pets.append(value)
print(animals)
print(pets)

第三码

animals = ['cat','dog','donkey','mouse','pig']
pets=[]
print(animals)
print(pets)
for value in animals:
    value=aniamls.pop()
    pets.append(value)
print(animals)
print(pets)

为什么第三个代码至少在运行,而不是第一和第二个代码?

为什么第三个代码中animals的内容没有全部附加到pets上?

【问题讨论】:

  • 是什么让你认为前两个没有运行?
  • pets = animals.copy() 应该够了
  • animals.pop()=value 不是语法上有效的代码。 = 的右边不能有函数调用。对于第三个代码,请参阅 here 了解为什么会跳过元素。
  • 欢迎。您是否尝试运行第三个代码 sn-p?有一个错字 - 在定义 animals 时尝试访问 aniamls 应该不起作用。感谢您花时间提供以某种方式运行的代码 - 第三个 sn-p 应该给出 NameError 并退出...

标签: python list loops for-loop


【解决方案1】:

所以回答你的第一个问题。第三个代码通过而前两个没有通过的原因是因为

pets.append(value)

是追加到pets数组的正确方式。

不是所有pets的内容都附加到animals后面是因为pop不写索引的话默认会删除索引的最后一项。如果您在循环中输入索引,您将能够捕获丢失的索引

【讨论】:

    【解决方案2】:

    第一个问题的答案:

    在第一段代码中,Python 引发了SyntaxError,因为这行:animals.pop()=value。在 Python 中,您可以像这样分配一个变量:x = 3,其中变量名称位于等号的左侧,而您要分配给该变量的值位于等号的右侧。 animals.pop() 是返回animals 列表中最后一项的函数,因此它不能是变量名。您只是交换了等号的两侧。为了使 Python 不会抛出错误,您应该将该行替换为 value = animals.pop(),就像您在第三段代码中所做的那样。

    在第二段代码中,您只是将动物拼写错误(您将其拼写为“aniamls”,导致NameError。您还分配返回值pets.append(value)(其中是None,即不返回任何东西)到petspets 的值设置为None,这使得Python 在for 循环的第二次迭代中评估pets.append(value),并且由于pets 现在是@987654335 @,Python不能调用函数append,一个List函数就可以了。

    第二个问题的答案:

    for value in animals: 行开始遍历列表animals,这基本上意味着您正在for 循环中为动物中的每个值运行代码,并且变量value 被分配了该值。因为您已经从 for 循环中获得了 value 变量,所以您不需要在 for 循环中创建 value 变量。此外,a_list.pop() 返回a_list 中的最后一个值,因此无论如何它都无法解决您的问题。如果您想了解有关列表的pop() 函数的更多信息,请查看@mounika 的答案。

    解决问题的更好方法

    您提到的简洁代码可能是:pets = animals。这实际上将animals 变量的值复制到pets。但是,这实际上别名 animalspets,这基本上使得更改pets 也以相同的方式更改animals,这是你可能不想要的。这就是为什么像pets = animals[:] 这样的东西会更好,这会产生一个新变量pets,它的值与animals 的值是分开的。 animals[:] 基本上是一个新值,它是一个包含列表animals 中所有项目的列表(本质上是animals 的副本)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2011-09-11
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多