【问题标题】:Why doesn't this for loop print the same integer during each iteration? [duplicate]为什么这个 for 循环在每次迭代期间不打印相同的整数? [复制]
【发布时间】:2020-04-30 15:01:06
【问题描述】:

在下面的代码 sn-p 中,我很困惑为什么可以使用列表的第一个元素来迭代另一个列表。有人可以解释一下为什么这不只是将整数 0 打印六次吗?

idx = [0,0,0]

junk = [1, 2, 3, 4, 5,6]

for idx[0] in junk:

    print(idx[0])

【问题讨论】:

    标签: python


    【解决方案1】:

    你的代码看起来很奇怪。您可以通过这种方式将循环编号存储到idx[0] - 您可以通过打印它来查看:

    idx = [0,0,0]
    
    junk = [1, 2, 3, 4, 5,6]
    
    for idx[0] in junk:
        print(idx[0], idx)
    

    得到

    1 [1, 0, 0]
    2 [2, 0, 0]
    3 [3, 0, 0]
    4 [4, 0, 0]
    5 [5, 0, 0]
    6 [6, 0, 0]
    

    因此,您在每次迭代中都在积极地更改 idx[0] 的值 - 完成了多少次迭代取决于 junk 的值。

    您可以创建一个“创造性/低效”的列表副本:

    junk = [1, 2, 3, 4, 5,6]
    idx = [0] * len(junk)
    for i,idx[i] in enumerate(junk): 
        pass
    

    虽然我不知道一个人需要什么:D

    【讨论】:

    • 哈哈...“创意”代码 == 代码审查失败。
    • @Seth 绝对!
    【解决方案2】:

    因为 for 循环分配给循环变量(在您的情况下为 idx[0])。这在您的示例中是允许的。

    您最终通过这样做修改了idx 数组:

    idx = [0,0,0]
    
    junk = [1, 2, 3, 4, 5,6]
    
    for idx[0] in junk:
    
        print(idx[0])
    
    print(idx)
    

    输出:

    1
    2
    3
    4
    5
    6
    [6, 0, 0]  # idx[0] is 6, the last value assigned to it by the for-loop
    

    【讨论】:

      【解决方案3】:

      for idx[0] in junk: 在每次迭代中更改idx[0]。添加print(idx) 以查看。使用for i in junk: 循环垃圾。

      【讨论】:

        【解决方案4】:

        因为它是迭代器协议。每次您遍历 junk 时,它都会将 idx[0] 设置为下一个值。 您可能认为它的行为类似于下面的代码;

        idx = [0, 0, 0]
        junk = [1, 2, 3, 4, 5, 6]
        
        junk = iter(junk)
        idx[0] = next(junk)
        idx[0] = next(junk)
        idx[0] = next(junk)
        idx[0] = next(junk)
        idx[0] = next(junk)
        idx[0] = next(junk)
        print(idx[0])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 2016-06-24
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多