代码优化提示

时间:2017-03-07 16:32:44

标签: python optimization

我在Python中编写了一个代码,用于打印在给定阈值下截断的Fibonacci序列。

m_char=input('threshold: ')
m=int(m_char)

def fibonacci(m):
    lst=[0, 1]
    while lst[-1] <= m:
        a = lst[-2]+lst[-1]
        if a <= m:
            lst.append(a)
        else:
            print(lst)
            return

fibonacci(m)

我不喜欢对mwhile语句中的变量if进行双重检查:我很确定它是多余的,所以有一种方法可以写更高效的代码。我想保留列表的使用。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只需使用

while True:

循环中的检查实际上决定了循环的运行频率。

根本不使用列表索引会更有效,而是使用两个变量维护最后两个Fibonacci数。此外,返回列表而不是打印它更为惯用。如果需要,让调用代码打印列表:

def fibonacci(m):
    lst=[0, 1]
    a,b = lst
    while True:
        a,b = b, a+b
        if b <= m:
            lst.append(b)
        else:
            return lst

答案 1 :(得分:1)

def fibonacci(m):
    lst=[0, 1]
    a = lst[-2]+lst[-1]
    while a <= m:
        lst.append(a)
        a = lst[-2]+lst[-1]
    return lst

您可以为每个循环计算a一次,并使用它来确定循环是否继续