Python中的枚举(Enumerate)与For循环

3
我想将enumerate转换为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)

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


你想要什么输出? - codester_09
1
貌似是一个棘手的问题 :) - Bob
3个回答

3
在第一版中,您将基于子集的初始值计算所有内容,在第二版中,您将直接更新元素。
特别是在第一次迭代中,您将执行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)

0
在您的第一个案例中,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]] 的总和始终等于迭代的索引值。

希望您能理解


0

当你在第二个例子中写入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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接