Bird
Raised Fist0
Pythonprogramming~5 mins

Random data generation in Python - Time & Space Complexity

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Time Complexity: Random data generation
O(n)
Understanding Time Complexity

When we generate random data, we want to know how long it takes as we ask for more data.

We ask: How does the time grow when we create more random items?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

import random

def generate_random_list(n):
    result = []
    for _ in range(n):
        result.append(random.randint(1, 100))
    return result

This code creates a list of n random numbers between 1 and 100.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The loop that runs n times to add random numbers.
  • How many times: Exactly once for each number requested, so n times.
How Execution Grows With Input

Each time we ask for one more random number, the work grows by one step.

Input Size (n)Approx. Operations
10About 10 random picks and adds
100About 100 random picks and adds
1000About 1000 random picks and adds

Pattern observation: The work grows directly with the number of items requested.

Final Time Complexity

Time Complexity: O(n)

This means the time to generate random data grows in a straight line as you ask for more numbers.

Common Mistake

[X] Wrong: "Generating random numbers is instant and does not depend on how many we want."

[OK] Correct: Each random number takes a small amount of time, so more numbers mean more total time.

Interview Connect

Understanding how time grows with data size helps you write efficient code and explain your thinking clearly in interviews.

Self-Check

"What if we generated random numbers inside a nested loop? How would the time complexity change?"

Practice

(1/5)
1. What does the random.randint(a, b) function do in Python?
easy
A. Returns a random float between a and b
B. Returns a random integer N such that a ≤ N ≤ b
C. Returns a random element from a list
D. Shuffles the elements of a list in place

Solution

  1. Step 1: Understand the function purpose

    random.randint(a, b) generates a random integer between two given numbers a and b, inclusive.
  2. Step 2: Compare options with function behavior

    Returns a random integer N such that a ≤ N ≤ b correctly describes this behavior. Options A, C, and D describe other functions like random.uniform, random.choice, and random.shuffle.
  3. Final Answer:

    Returns a random integer N such that a ≤ N ≤ b -> Option B
  4. Quick Check:

    random.randint = random integer in range [OK]
Hint: randint returns integers between two numbers inclusive [OK]
Common Mistakes:
  • Confusing randint with random float functions
  • Thinking randint returns a list element
  • Mixing up randint with shuffle
2. Which of the following is the correct way to import the random module and use choice to pick a random element from a list items?
easy
A. import random; random.choice(items)
B. from random import randint; choice(items)
C. import random.choice; choice(items)
D. import random; random.randint(items)

Solution

  1. Step 1: Check import syntax

    To use choice, you must import the random module fully or import choice specifically. import random; random.choice(items) imports the module correctly.
  2. Step 2: Verify function usage

    import random; random.choice(items) calls random.choice(items), which is correct. from random import randint; choice(items) imports randint but tries to call choice without import. import random.choice; choice(items) has invalid import syntax. import random; random.randint(items) calls randint with a list, which is incorrect.
  3. Final Answer:

    import random; random.choice(items) -> Option A
  4. Quick Check:

    Correct import and call = import random; random.choice(items) [OK]
Hint: Import random module fully to use choice function [OK]
Common Mistakes:
  • Importing wrong functions
  • Calling functions without module prefix
  • Using randint instead of choice
3. What is the output of this code?
import random
items = ['apple', 'banana', 'cherry']
random.shuffle(items)
print(items)
medium
A. SyntaxError because shuffle returns a new list
B. ['apple', 'banana', 'cherry'] (always same order)
C. A new list with one random item from items
D. A randomly shuffled list of the original items

Solution

  1. Step 1: Understand random.shuffle behavior

    random.shuffle rearranges the list elements in place randomly. It does not return a new list.
  2. Step 2: Analyze the print output

    After shuffling, printing items shows the same list but with elements in random order. So output is a shuffled list, not the original order or a single item.
  3. Final Answer:

    A randomly shuffled list of the original items -> Option D
  4. Quick Check:

    shuffle changes list order in place [OK]
Hint: shuffle changes list order in place, no new list returned [OK]
Common Mistakes:
  • Expecting shuffle to return a new list
  • Thinking shuffle picks one random item
  • Assuming list order stays same
4. The following code tries to pick a random element from a list but causes an error. What is the problem?
import random
items = ['red', 'green', 'blue']
print(random.choice(items, 1))
medium
A. random.choice needs the list to be converted to a tuple
B. random.choice requires the list to be sorted first
C. random.choice does not take two arguments
D. random.choice only works with strings, not lists

Solution

  1. Step 1: Check random.choice function signature

    random.choice takes exactly one argument: a sequence (like a list). It returns one random element.
  2. Step 2: Identify the error cause

    The code passes two arguments (items and 1), which is invalid and causes a TypeError.
  3. Final Answer:

    random.choice does not take two arguments -> Option C
  4. Quick Check:

    choice takes one argument only [OK]
Hint: choice takes only one argument: the sequence [OK]
Common Mistakes:
  • Passing extra arguments to choice
  • Thinking choice returns multiple items
  • Confusing choice with sample
5. You want to generate a dictionary where keys are numbers from 1 to 5 and values are random integers between 10 and 20. Which code correctly does this?
hard
A. import random result = {i: random.randint(10, 20) for i in range(1, 6)}
B. import random result = {random.randint(10, 20): i for i in range(1, 6)}
C. import random result = {i: random.choice(range(10, 20)) for i in range(1, 6)}
D. import random result = dict(random.randint(10, 20) for i in range(1, 6))

Solution

  1. Step 1: Understand dictionary comprehension syntax

    We want keys as numbers 1 to 5 and values as random integers between 10 and 20. The syntax is {key: value for key in iterable}.
  2. Step 2: Check each option

    import random result = {i: random.randint(10, 20) for i in range(1, 6)} correctly uses i as key and random.randint(10, 20) as value for each i in 1 to 5.
    import random result = {random.randint(10, 20): i for i in range(1, 6)} swaps keys and values incorrectly.
    import random result = {i: random.choice(range(10, 20)) for i in range(1, 6)} uses random.choice(range(10, 20)) which produces integers 10-19 excluding 20, unlike randint(10,20).
    import random result = dict(random.randint(10, 20) for i in range(1, 6)) tries to convert a generator of integers to dict, which causes an error.
  3. Final Answer:

    import random result = {i: random.randint(10, 20) for i in range(1, 6)} -> Option A
  4. Quick Check:

    Correct dict comprehension with randint [OK]
Hint: Use dict comprehension with randint for random values [OK]
Common Mistakes:
  • Swapping keys and values
  • Using dict() on generator of ints
  • Using choice with range(10,20) excludes 20