【问题标题】:Weird output of following simple Python list program [duplicate]以下简单Python列表程序的奇怪输出[重复]
【发布时间】:2021-01-04 18:52:26
【问题描述】:

看到以下 Python 程序的输出后,我有点困惑:

a = [0,1,2,3]

for a[-1] in a:

    print(a[-1])

输出:

0

1

2

2

在这里,我获取了一个列表[0,1,2,3],它给出了output: 0 1 2 2,但我预计输出将是3 3 3 3,因为a[-1] 访问列表中的数字3。请有人帮我解决我的疑问。

【问题讨论】:

  • 如果在循环的每次迭代中打印整个列表,就会更容易看到发生了什么。 3 不是结果的可能部分,因为您在第一次迭代时覆盖了该值。
  • 这里有奇怪的反对票。有人应该说for a[-1] in a 不应该 被使用,for a in a 也不应该被使用。将项目分配给与列表相同的变量是一件容易的事。当然,你可以做到,但你会让自己面对令人讨厌的错误。

标签: python python-3.x list


【解决方案1】:

对于每个条目,您将值分配给a[-1],这是最后一个条目并打印它。当您到达最后一个条目时,它具有倒数第二个条目的值,因此 2 出现两次。

所以你首先将a[3]的值设置为0并输出,然后将a[3]的值设置为1并输出等等。

您可以通过在循环完成后打印列表来验证这一点:

>>> a
[0, 1, 2, 2]

【讨论】:

  • 这可以通过在循环完成后打印列表来验证。
【解决方案2】:

这就是您的代码的工作方式:对于列表中的每个项目,定义每个项目 a[-1],然后打印该项目,称为 a[-1]。在最后一个条目中,它具有倒数第二个条目的值,因此 2 出现了两次。如果你想打印列表 a[-1] 的值 3 次,试试这个:

for i in range(0, 4):
   print(a[-1])

【讨论】:

    【解决方案3】:

    你不能绑定到a[-1] 它不是一个合法的变量名。也就是说,我很惊讶它没有因此而爆炸。

    法律上的变化是

    for i in a:
        print(a[-1])
    

    虽然通常这不是必需的 - 我仍然未使用。

    你也可以

    for i in range(0, len(a)):
        print(a[-1])
    

    目前尚不清楚您想要实现什么。如果要打印最后一个元素x次,其中x是元素个数,还有其他解决方案。

    这可能是我的 goto:

    [a[-1]] * len(a)
    

    【讨论】:

      【解决方案4】:

      我认为您尝试编写的代码看起来更像这样:

      a = [0,1,2,3]
      for number in a:
           print(a[-1])
      

      当您执行 for 循环(for X in Y)时,Y 应该是一个存在的变量,而 X 不应该是现有变量的名称或对变量一部分或任何类似内容的引用。 X 应该只是你编造的一个新名称,用来指代 Y 中的每一个东西。你使用 a[-1] 表示 x 让我的头爆炸了;只需坚持使用 X 的新名称即可。

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 2016-01-28
        • 1970-01-01
        • 1970-01-01
        • 2015-12-29
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        相关资源
        最近更新 更多