繁体   English   中英

在python中枚举到For循环

[英]Enumerate in python to For loop

我想将枚举转换为 for 循环。

subsets = [0]*15
subsets[0] = 2
subsets = [index + subsets[subsets[index]] for (index,value) in enumerate(subsets)]
print(subsets)

和类似的

subsets = [0]*15
subsets[0] = 2
for index,value in enumerate(subsets):
  subsets[index] = index + subsets[subsets[index]]
print(subsets)

但我得到了不同的结果。 请帮我解决这个问题。

在第一个版本中,您将根据子集的初始值计算所有内容,在第二个版本中,您将就地更新元素。

特别是,在第一次迭代中,您将执行subsets[0] = 0 + subsets[subsets[0]] = 0 + subsets[2] = 0 而对于第一个代码subsets[0]将是2直到执行结束。

等效代码是

subsets = [0]*15
subsets[0] = 2
tmp = [0] * 15
for index,value in enumerate(subsets):
  tmp[index] = index + subsets[subsets[index]]
subsets = tmp
print(subsets)

在您的第一种情况下, subsets列表的元素不会更改,因为您创建了一个新的subsets列表(两个名称相同)并在此列表中添加值。

但是在第二种情况下,您在迭代列表值时更新了列表值,这就是您得到不同输出的原因。]

执行您的第二个代码。

subsets = [0]*15
subsets[0] = 2
for index,value in enumerate(subsets):
  subsets[index] = index + subsets[subsets[index]
print(subsets) ## [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  1. 在第一次迭代中(index=0)index + subsets[subsets[index]] ( subsets[index]=2 ) 和subsets[index]=2 ( subsets[2]=0 ) 结果现在等于 0 + 0 即 0。
  2. 在第二次迭代(index=1)index + subsets[subsets[index]]subsets[index]=0 )和之后的subsets[0]=0 (因为你在第一次迭代中将第零个值更改为 0 ) ( subsets[2]=0 ) 结果现在等于 1 + 0,即 1。

同样,您的index + subsets[subsets[index]]总和始终等于迭代的索引值。

我希望你明白

当您在第二个示例中编写subsets[index] =时,原始subsets的值将被覆盖并用于下一次迭代等。

这是编写循环的方法,如果您不想enumerate ,请使用for index in range(len(subsets))subsets[subsets[index]]而不是subsets[value]

output = [] 
subsets = [2] + [0]*14
for index, value in enumerate(subsets): 
    output.append(index + subsets[value])
print(output)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM