【问题标题】:Confused with the output of the following python list对以下 python 列表的输出感到困惑
【发布时间】:2021-01-18 17:12:00
【问题描述】:

自从看到这段代码后,我就糊涂了。

a=[0,1,2,3]

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

所以根据代码,a[-1] 应该是最后一个元素,即 3,因此根据我的说法,代码应该打印以下输出:

3
2 
1
0

但我得到的输出如下:

0
1
2
2

任何人都可以通过逐步迭代来帮助如何执行以下代码。

【问题讨论】:

  • 你认为for a[-1] in a: 做了什么?
  • 目前还不清楚你理解代码的哪些部分。您能否解释一下为什么您认为代码会输出 3,2,1,0?
  • @MisterMiyagi for a[-1] in a: 做什么?
  • 我刚刚在考试中发现了这段代码,从那时起我一直在想,a[1] in a: 在该代码中做了什么来获得以下输出。

标签: python list arraylist iterator


【解决方案1】:

如果你想反转一个列表,你应该尝试a[::-1],所以根据你的要求,

a = [0, 1, 2, 3]

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

【讨论】:

  • 感谢您的帮助,但我不想颠倒列表,我只想知道for a[-1] in a: 在以下代码中所做的工作以获取自从我看到以来的输出它。看来我下次需要改写得更好。
【解决方案2】:

要了解你的代码是做什么的,首先让我们看看下面的代码是做什么的:


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

这段代码可以转换为以下基于索引的for循环:


    for i in range(len(a)):
        item = a[i]
        print(item)

上面sn-ps的输出

0
1
2
3

在上面的代码中,您正在迭代列表a,按从左到右的顺序一个一个地进行迭代,并将每个值分配给变量item。然后你正在打印那个 item 变量。

现在,看看你的代码做什么,让我们将它转​​换为基于索引的 for 循环


    for i in range(len(a)):
        a[-1] = a[i] # See, how you are re-assigning the last element of list
        print(a[-1])

在每次迭代中,ia[i]a 的值如下:

first iteration, i =0, a[i] = 0, a = [0,1,2,0], output of a[-1] = 0
second iteration, i = 1, a[i] = 1, a = [0,1,2,1], output of a[-1] = 1
third iteration, i = 2, a[i] = 2, a = [0,1,2,2], output of a[-1] = 2
final iteration, i = 3, a[i] = 2, a = [0,1,2,2], output of a[-1] = 2

这就是您看到输出为 0,1,2,2 的原因

如果你想以相反的顺序打印数组,你不应该将值分配给数组的最后一个元素,修改你的代码如下


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

这里 a[::-1] 反转数组,然后您使用作用域变量项来迭代反转的数组。

【讨论】:

  • 谢谢你的回答。我很困惑,但您的逐步执行有所帮助。
【解决方案3】:

for 循环中的a[-1] 在每次迭代时重置最后一个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多