[英]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]
(index=0)
, index + subsets[subsets[index]]
( subsets[index]=2
) 和subsets[index]=2
( subsets[2]=0
) 结果现在等于 0 + 0 即 0。(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.