# List comprehension examples from lab 1/29/2026 (week 2)

#----------------------------------------------------------
# create a list of squares

# standard approach
def example1():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    squares = []
    for n in nums:
        squares.append(n * n)
    return squares

# equivalent code using a list comprehension
def example1a():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    squares = [n * n for n in nums]
    return squares

#----------------------------------------------------------
# create a list of squares of just the odd numbers

# standard approach
def example2():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    squares = []
    for n in nums:
        if n % 2 == 1:
            squares.append(n * n)
    return squares

# equivalent code using a list comprehension
def example2a():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    squares = [n * n for n in nums if n % 2 == 1]
    return squares

#----------------------------------------------------------
# create a list of odd numbers paired with their squares

# standard approach
def example3():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    tuples = []
    for n in nums:
        if n % 2 == 1:
            t = (n, n * n)
            tuples.append(t)
    return tuples

# equivalent code using a list comprehension
def example3a():
    nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    tuples = [(n, n * n) for n in nums if n % 2 == 1]
    return tuples

#----------------------------------------------------------
# create a list of all possible pairs

# standard approach
def example4():
    nums = [1, 2, 3, 4]
    tuples = []
    for x in nums:
        for y in nums:
            t = (x, y)
            tuples.append(t)
    return tuples

# equivalent code using a list comprehension
def example4a():
    nums = [1, 2, 3, 4]
    tuples = [(x, y) for x in nums for y in nums]
    return tuples

#----------------------------------------------------------
# same as example 4 but omitting identity tuples (n, n)

# standard approach
def example5():
    nums = [1, 2, 3, 4]
    tuples = []
    for x in nums:
        for y in nums:
            if x != y:
                t = (x, y)
                tuples.append(t)
    return tuples

# equivalent code using a list comprehension
def example5a():
    nums = [1, 2, 3, 4]
    tuples = [(x, y) for x in nums for y in nums if x != y]
    return tuples

#----------------------------------------------------------
