试图根据数据创建一个列表

时间:2019-09-30 02:38:17

标签: 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:
                f.append(f[i-2]+f[i-1]**2)
        return f

所以上面是我的功能,所以我期望的是 为generate_numbers(0,1) 我可以获得清单[0, 1, 1, 2, 5, 27, 734] 这是generate_numbers(0, 1) == [0, 1, 1, 2, 5, 27, 734]

但是,使用我的脚本,它会不断弹出“列表索引超出范围”的错误,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

您可以简单地从初始化为[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

答案 1 :(得分:0)

例外是 IndexError 是什么原因造成的?

在您的最后一个if条件中,f的索引为 i-1,假设i为3,因此索引应该为2,并且未定义f [2],因为您没有定义f [2]!

因此,为了更正您的代码,这是我的代码

inter_data = np.where((((j + 1) * 100) > inter_data) & (inter_data > (j * 100)), (j * 100) + 50, inter_data)

因为Python使用索引零作为第一个元素

答案 2 :(得分: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