如何将这个Python可变函数转换为不可变函数?

时间:2016-09-10 14:29:11

标签: python list immutability

我有一个可变的Fibonacci函数,它会改变列表,以便将该列表作为fib序列返回。我想做同样的事情......但是列表(或者在这种情况下是元组)不应该改变。返回仍然必须发送整个列表,如何实现它,而不使用递归。

例)如果x = 6 ......列表应返回{1,1,2,3,5,8}

我在python 3.5中运行

这是我的代码:

def mutableFib(x):
result = []
for y in range(0,x):
    if y < 2:
        result.append(1)
    else:
        last = result[y - 1]
        previous = result[y - 2]
        result.append(last + previous) //result is being changed
return result

2 个答案:

答案 0 :(得分:0)

您可以为每个新元素创建一个新列表。

def fibonacci(x):
    list_of_fibonaccis = []
    for y in range(0,x):
        if y < 2:
            temp_fibonacci = [1] * (y + 1)
        else:
            last = list_of_fibonaccis[y-1][-1]
            previous = list_of_fibonaccis[y-1][-2]
            temp_fibonacci = list_of_fibonaccis[y-1] + [last + previous]
        list_of_fibonaccis.append(temp_fibonacci)
    return list_of_fibonaccis[-1]

答案 1 :(得分:0)

如果我通过“不使用递归的函数方法”理解你的意思,看起来输入参数应该是前n个Fibonacci数的列表,输出应该是第一个n +的列表1个斐波纳契数。如果这是正确的,那么你可以使用

def fibonacci(fib):
    if not fib: return [1]
    if len(fib) == 1: return [1,1]
    return fib + [fib[-1]+fib[-2]]