【问题标题】:How does this for loop is work? [duplicate]这个 for 循环是如何工作的? [复制]
【发布时间】:2016-10-12 12:25:04
【问题描述】:

请告诉我这个 for 循环是如何工作的。

b= [4,5,6]
for b[-1] in b:
   print(b[-1])

这段代码 sn-p 给我的输出是:-

4
5
5

我使用 Python 2.7 进行了检查

【问题讨论】:

  • 您可以在 pythontutor.com 上运行您的代码以获得非常好的可视化效果。
  • 你在哪里找到这个代码?在 for 循环头中使用像 b[-1] 这样的棘手表达式并不是典型的生产质量风格,所以我猜这最初是为了作为“猜测这段代码的行为”之类的谜语。也许与我们分享它的来源会提供额外的有用背景。
  • 是的,这是一个谜题

标签: python


【解决方案1】:

每次迭代,都会选择 b 的元素 i。它归因于 b[-1](b 的最后一个元素)并打印。所以每一步,b的最后一个元素(循环前6个)都被赋予了第i个元素的值。

最终,在最后一次迭代中,第 i 个值被读取,读取的值是迭代之前写入的值(即 5)。

修改代码,每一步打印b,就很明显了:

b = [4,5,6]
for b[-1] in b:
    print(b[-1])
    print(b)

(现实生活中不要做这种事。)

【讨论】:

  • 那么为什么5 在最后一次迭代中打印出来而不是6?
【解决方案2】:

你可以在打印整个b列表时理解它:

b= [4,5,6]
for b[-1] in b:
    print(b)
    print(b[-1])

输出

[4, 5, 4]  # first iteration, you set last element(6) with first element(4) [4,5,6] -> [4,5,4]
4
[4, 5, 5]  # second iteration, you set last element(4) with element(5), [4,5,4] -> [4,5,5]
5
[4, 5, 5]  # last iteration, you set last element(5) with element(5), no change
5

所以基本上每次迭代你的最后一个元素都会成为你迭代的元素。

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多