Python 正在尝试基于数据创建列表

Python 正在尝试基于数据创建列表,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:

下面是我的脚本,我试图为数字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:
                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(但您指的是列表中的上一个值加上前面两个位置的值的平方!