【问题标题】:Looping through a list with index specific item循环遍历具有索引特定项的列表
【发布时间】:2020-05-25 07:39:52
【问题描述】:

最近在查一些问题和答案时,发现了一个问题:

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

结果是:

0
1
2
2

我对答案描述不满意,答案描述说:

x[-1] 的值在每次迭代中都会发生变化。

【问题讨论】:

  • 这个问题为什么是拉丁文?
  • 我希望我能找到重复的...发生的情况是 x[-1] 在每次迭代中都被重新分配为 next(<x iterator>)
  • 我不明白你在说什么。我已经用英文写了这个问题。
  • @dipesh 我们看到:Molestias vero quae deserunt laborum voluptatem
  • 明白了。将编辑问题。谢谢

标签: python python-3.x list loops


【解决方案1】:

当你写的时候:

for a in x:

发生的情况是您在每次迭代中将 x 中的元素分配给 a。所以a0 变为3

现在,当你这样做时:

for x[-1] in x:

您正在做的是为x 的最后一个元素分配x 中的值。这应该澄清它:

>>> x = [0, 1, 2, 3]
>>> for x[-1] in x:
...     print(x,x[-1])

#output
[0, 1, 2, 0] 0     # a = 0, make x[-1] = a, x becomes [0, 1, 2, 0], print x[-1] = 0
[0, 1, 2, 1] 1     # a = 1, make x[-1] = a, x becomes [0, 1, 2, 1], print x[-1] = 1
[0, 1, 2, 2] 2     # a = 2, make x[-1] = a, x becomes [0, 1, 2, 2], print x[-1] = 2
[0, 1, 2, 2] 2     # a = 2, make x[-1] = a, x becomes [0, 1, 2, 2], print x[-1] = 2

解释: 在第一次迭代中,a = 0 分配给 x[-1] 所以x 变为[0, 1, 2, 0] 然后你打印x[-1] 出来是0

然后在第二次迭代中,a = 1 被分配给 x[-1],所以 x 变成 [0, 1, 2, 1] 然后你打印 x[-1] ,结果是 1

等等……

【讨论】:

    【解决方案2】:

    这是一个很好的问题。为了弄清楚发生了什么,我将代码扩展为:

    x = [0, 1, 2, 3]
    for x[-1] in x:
        print(f"the array x is {x}")
        print(f"the value of is x[-1] is {x[-1]}")
        print("***") # just a separator between iterations
    

    结果是

    the array x is [0, 1, 2, 0]
    the value of is x[-1] is 0
    ***
    the array x is [0, 1, 2, 1]
    the value of is x[-1] is 1
    ***
    the array x is [0, 1, 2, 2]
    the value of is x[-1] is 2
    ***
    the array x is [0, 1, 2, 2]
    the value of is x[-1] is 2
    ***
    

    如您所见,python 使用数组的最后一个单元格 - x[-1] 作为保存其迭代值的变量。这就是为什么当我们到达最后一次迭代时,它会保存上一次迭代的值 '2' ,并且它会打印出来。

    【讨论】:

      【解决方案3】:

      解释注定要清楚。

      x[-1] 指向x 的最后一个元素。

      for x[-1] in x: 简单地说:遍历x 中的元素并将当前值保存到x[-1]

      所以这里是每次迭代的顺序:

      (循环开始前)x == [0, 1, 2, 3]

      1. x[-1] = 0 # x == [0, 1, 2, 0]
      2. x[-1] = 1 # x == [0, 1, 2, 1]
      3. x[-1] = 2 # x == [0, 1, 2, 2]
      4. x[-1] = 2 # x == [0, 1, 2, 2]

      【讨论】:

        猜你喜欢
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多