I cannot see any relevant difference between the for version and the manual one, given the different outcomes:
# MANUAL version ==============================
lst = [lambda: 2]
lst.append(lambda: 2 * lst[0]())
lst.append(lambda: 2 * lst[1]())
lst.append(lambda: 2 * lst[2]())
print([item.__name__ for item in lst])
# ['<lambda>', '<lambda>', '<lambda>', '<lambda>']
print("result:", lst[-1]())
# result: 16
# FOR version ==============================
lst = [lambda: 2]
for i in range(3):
print(i)
lst.append(lambda: 2 * lst[i]())
print([item.__name__ for item in lst])
# ['<lambda>', '<lambda>', '<lambda>', '<lambda>']
print("result:", lst[-1]())
# 0
# 1
# 2
# RecursionError: maximum recursion depth exceeded