我在python中遇到循环问题。我想用这个算法创建一个列表x [X0,X1,.... Xn]:
X1=X0-(5+X0*2); X2=X1-(5+X1*2);.....
我试试这个,但结果不正确。
a=list(np.empty(10))
a[0]=1
for i in range(10):
a.append(a[i]-(5+a[i]*2))
print (a [i])
如果手动迭代结果,则给出:
[1,-6,1,-6, ....]
但是在循环之后它给出了:
[1,-1.29074375768e-231,2.19254982219e-314,.....]
循环在C中很容易,但如果你有想法,我不理解Python中的功能吗?
答案 0 :(得分:1)
除了单个元素之外,没有理由开始列表。在C中,您必须预先确定列表中需要多少元素,但在Python中并非如此,因此执行list(np.empty(10))
会创建一个列表,其中包含十个无意义的元素,这些元素只会妨碍您。
a = [1] # This creates a list that starts off with the element 1.
for i in range(10):
a.append(a[i] - (5 + a[i] * 2))
print (a[i])
答案 1 :(得分:1)
问题在于list(np.empty(10))
没有按照您的想法行事。您希望它返回一个包含10个零的列表,但它实际上会返回一个包含10个“随机”数字的列表(实际上,它会返回10个未初始化值的列表)。
来自numpy docs:
空,与零不同,不会将数组值设置为零,并且可能 因此速度要快一些。另一方面,它需要 用户手动设置数组中的所有值,应该使用 谨慎。
(强调我的)
相反,您应该只创建一个包含单个元素的列表1
,然后从那里继续:
a = [1]
for i in range(10):
a.append(a[i] - (5 + a[i] * 2))
print(a)
# [1, -6, 1, -6, 1, -6, 1, -6, 1, -6, 1]
答案 2 :(得分:0)
我建议你阅读python中的函数,列表和for循环,从你的问题来看,你似乎并不理解它们。
您的代码目前无法运行的原因有多种,但它们都很容易修复。
首先,您启动一个带有numpy列表的列表,这是不必要的。
a = list(np.empty(10))
可以简单地成为
a = list()
甚至更简单,
a = []
接下来,不是错误,而是建议,
a[0] = 1
可以删除,而是在初始化列表时,将其中一个作为第一项
a = [1]
之后,您的代码应该可以运行。总结如下:
n = 10 # or whatever number you want
a = [1]
for i in range(n - 1):
a.append(a[i] - (5 + a[i] * 2))
如果你想把它作为一个功能:
def formula_list(n):
a = [1]
for i in range(n - 1):
a.append(a[i] - (5 + a[i] * 2))
return a
答案 3 :(得分:0)
他们安排你的等式会不断打印-6和1,因此:
a = [1]
iti = 0
while(True):
thing = a[iti]-(5+(a[iti]*2))
a.append(thing)
iti+=1
print(thing)
我选择不使用for循环来显示一个更容易理解的例子,但如果你愿意,你仍然可以使用它。