2026-10-02 · Q&A guide

Python Fibonacci: Build a List of Numbers Correctly

Learn how to generate a Fibonacci list in Python without summing values, and fix common pitfalls.

Common Mistake: Mixing Loop and Function Definition

In the original code the `fib` function is defined inside the `for` loop that iterates over `numberlist`. This means the function is re‑created on every iteration, and its scope is limited to that loop. It also hides the variable `n` that is passed to the function, causing confusion.

Why the Sum Appears: The Function Returns the nth Term

The `fib` implementation returns the value of the nth Fibonacci number, not the sum of the first n numbers. When you append `a` to `fibonaccinumbers` and then print `a`, you see the nth term. If you later sum the list, you get the total of all terms, which is unrelated to the original intent.

Correct Approach: Define fib Once and Build the List

Define the Fibonacci function outside the loop, then iterate over the desired range to fill the list.

def fib(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

fibonacci_numbers = [fib(i) for i in range(20)]
print(fibonacci_numbers)

Optimized Version: Using a Generator

A generator can produce Fibonacci numbers lazily, which saves memory for large sequences.

def fib_gen(limit):
    a, b = 0, 1
    for _ in range(limit):
        yield a
        a, b = b, a + b

fibonacci_numbers = list(fib_gen(20))
print(fibonacci_numbers)

Putting It All Together

Choose the approach that fits your use case: a simple list comprehension for small sequences, or a generator for scalability. Keep the function definition separate from the loop to avoid accidental redefinition and to improve readability.

Takeaway: Define the Fibonacci function once, then iterate to build the list.

People also ask

How can I generate Fibonacci numbers up to a maximum value?

Use a while loop that stops when the next number would exceed the limit.

Can I use recursion for Fibonacci in Python?

Yes, but it is less efficient due to repeated calculations; use memoization or an iterative approach for performance.

Inspired by a public discussion on Stack Overflow. This article is an original explanation for learners.

← All posts