Python 正在尝试基于数据创建列表
下面是我的脚本,我试图为数字1-7创建一个函数,如果I=1,那么a,如果I=2,那么b,如果I>2,那么b+a**2Python 正在尝试基于数据创建列表,python,python-3.x,Python,Python 3.x,下面是我的脚本,我试图为数字1-7创建一个函数,如果I=1,那么a,如果I=2,那么b,如果I>2,那么b+a**2 def generate_numbers(a,b): f=[] for i in range(1,8): if i==1: f.append(a) elif i==2: f.append(b) else:
def generate_numbers(a,b):
f=[]
for i in range(1,8):
if i==1:
f.append(a)
elif i==2:
f.append(b)
else:
f.append(f[i-2]+f[i-1]**2)
return f
以上是我的函数,所以我期望的是
对于生成编号(0,1)
我可以得到一个列表[0,1,1,2,5,27734]
这是generate_number(0,1)=[0,1,1,2,5,27734]
但是,在我的脚本中,它会不断弹出一个错误“列表索引超出范围”,有人能帮忙吗?您可以从初始化为
[a,b]
的列表开始
def generate_numbers(a, b, n=5):
xs = [a, b]
for _ in range(n):
xs.append(xs[-2] + xs[-1]**2)
return xs
例外情况是
索引器
是什么引起的
在上一个if条件中,f的索引为
i-1,假设i是3,因此索引应该是2,而f[2]没有定义,因为您没有定义f[2]
为了更正你的代码,这是我的代码
def generate_numbers(a,b):
f=[]
for i in range(1,8):
if i==1:
f.append(a)
elif i==2:
f.append(b)
else:
f.append(f[i-1]+f[i]**2)
return f
因为Python使用索引0作为代码的第一个元素:
def generate_numbers(a,b):
f=[]
for i in range(1,8):
if i==1:
f.append(a) # now f[0] = a
elif i==2:
f.append(b) # now f[1] = b
else:
# when i = 3, you are accessing f[2] and f[1], but you didn't populate f[2], because the indexing starts at 0, so your append function is not populating from 1st index.
f.append(f[i-1]+f[i]**2) . # crashed here.
return f
更正代码:
def generate_numbers(a,b):
f=[]
for i in range(1, 8):
if i==1:
f.append(a)
elif i==2:
f.append(b)
else:
# one possiblity is to extract the last and second last element using reverse slicing.
f.append(f[-2]+f[-1]**2)
return f
另一种可能性:
def generate_numbers(a,b):
f=[]
# put a dummy element at 0th index.
f.append(0) . # now f[0] = 0
for i in range(1,8):
if i==1:
f.append(a) # f[1] = a
elif i==2:
f.append(b) # f[2] = b
else:
f.append(f[i-1]+f[i]**2) # now you can access f[i-1] and f[i-2]
return f[1:] # return the list by slicing the first element as it was dummy element
当i为3时,尝试访问f[i-1]时发生错误。此时,f只包含2个元素。您的问题描述应该修改!您当前的描述表明,对于所有i>2,值都是b+a**2(但您指的是列表中的上一个值加上前面两个位置的值的平方!