Inducción al uso de Python

Práctica 7: Listas

Objective

During this activity, students should be able to:


Activity Description

Solve the following set of problems using Python 3. Run and test each of your programs to make sure they work as expected.

  1. Write a program called positives.py. Define in this program a function called positives(x) that takes a list of numbers x as its argument, and returns a new list that only contains the positive numbers of x.

    Test your program with the following main() function:

    def main():
        print(positives([-21, -31]))
        print(positives([-48, -2, 0, -47, 45]))
        print(positives([-9, -38, 49, -49, 32, 6, 4, 26, -8, 45]))
        print(positives([-27, 48, 13, 5, 27, 5, -48, -42, -35, 49,
                         -41, -24, 11, 29, 33, -8, 45, -44, 12, 46]))
        print(positives([-2, 0, 27, 47, -13, -23, 8, -28, 23, 7,
                         -29, -24, -30, -6, -21, -17, -35, -8, -30,
                         -7, -48, -18, -2, 1, -1, 18, 35, -32, -42,
                         -5, 46, 8, 0, -31, -23, -47, -4, 37, -5,
                         -45, -17, -5, -29, -35, -2, 40, 9, 25, -11,
                         -32]))

    The expected program output should be:

    []
    [0, 45]
    [49, 32, 6, 4, 26, 45]
    [48, 13, 5, 27, 5, 49, 11, 29, 33, 45, 12, 46]
    [0, 27, 47, 8, 23, 7, 1, 18, 35, 46, 8, 0, 37, 40, 9, 25]
  2. Write a program called dotproduct.py. Define in this program a function called dotproduct(a, b) that takes two arguments: the lists a and b. It returns the result of performing the dot product of a times b. The dot product is an algebraic operation that takes two equal-length sequences of numbers and returns a single number obtained by multiplying corresponding entries and then summing those products:

    $$ a \cdot b = \sum_{i=1}^{n} a_i b_i=a_1 b_1 + a_2 b_2 + \cdots + a_n b_n $$

    Test your program with the following main() function:

    def main():
        print(dotproduct([], []))
        print(dotproduct([1, 2, 3], [4, 5, 6]))
        print(dotproduct([1.3, 3.4, 5.7, 9.5, 10.4],
                         [-4.5, 3.0, 1.5, 0.9, 0.0]))
        print(dotproduct([92, -39, 82, 16, -64, -1, -16, -45, -7, 39,
                          45, 0, 34, -3, -51, 71, 23, -8, 41, -40],
                         [-50, -81, 94, -84, 47, 86, 52, 19, -57, 36,
                          -20, 11, -42, 48, 14, 13, 9, -67, 92, 96]))
    
    

    The expected program output should be:

    0
    32
    21.45
    357
  3. Write a program called replicate.py. Define in this program a function called replicate(n, x) that takes two arguments: a list x and an integer number n, where n ≥ 0. It returns a new list that replicates n times each element contained in x.

    Test your program with the following main() function:

    def main():
        print(replicate(7, []))
        print(replicate(0, ['a', 'b', 'c']))
        print(replicate(3, ['a']))
        print(replicate(3, ['a', 'b', 'c']))
        print(replicate(4, [1, 2, 3, 4]))
    

    The expected program output should be:

    []
    []
    ['a', 'a', 'a']
    ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']
    [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
    
  4. The Fibonacci sequence is:

    $$ 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, \ldots $$

    The sequence starts with 0 and 1. Any number that follows is calculated by adding the previous two numbers.

    Write a program called fibo.py. Define in this program a function called fibo(n) that returns a list with the first n Fibonacci numbers.

    Test your program with the following main() function:

    def main():
        print(fibo(0))
        print(fibo(1))
        print(fibo(2))
        print(fibo(5))
        print(fibo(10))
        print(fibo(20))
        print(fibo(30))
        print(fibo(100))
    

    The expected program output should be:

    []
    [0]
    [0, 1]
    [0, 1, 1, 2, 3]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
    987, 1597, 2584, 4181]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
    987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025,
    121393, 196418, 317811, 514229]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610,
    987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368,
    75025, 121393, 196418, 317811, 514229, 832040, 1346269,
    2178309, 3524578, 5702887, 9227465, 14930352, 24157817,
    39088169, 63245986, 102334155, 165580141, 267914296,
    433494437, 701408733, 1134903170, 1836311903, 2971215073,
    4807526976, 7778742049, 12586269025, 20365011074, 32951280099,
    53316291173, 86267571272, 139583862445, 225851433717,
    365435296162, 591286729879, 956722026041, 1548008755920,
    2504730781961, 4052739537881, 6557470319842, 10610209857723,
    17167680177565, 27777890035288, 44945570212853, 72723460248141,
    117669030460994, 190392490709135, 308061521170129,
    498454011879264, 806515533049393, 1304969544928657,
    2111485077978050, 3416454622906707, 5527939700884757,
    8944394323791464, 14472334024676221, 23416728348467685,
    37889062373143906, 61305790721611591, 99194853094755497,
    160500643816367088, 259695496911122585, 420196140727489673,
    679891637638612258, 1100087778366101931, 1779979416004714189,
    2880067194370816120, 4660046610375530309, 7540113804746346429,
    12200160415121876738, 19740274219868223167,
    31940434634990099905, 51680708854858323072,
    83621143489848422977, 135301852344706746049,
    218922995834555169026]
    
  5. In statistics, the standard deviation \(\sigma\) is a measure of how spread out numbers are. It has the following formula:

    $$ \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2} $$

    Where \(\bar{x}\) is the arithmetic mean and is defined as follows:

    $$ \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i $$

    Write a program called deviation.py. Define in this program a function called deviation(x) that returns the standard deviation of the list of numbers contained in x.

    Test your program with the following main() function:

    def main():
        print(deviation([42]))
        print(deviation([10, 20]))
        print(deviation([1, 2, 3, 4, 5]))
        print(deviation([7, 7, 7, 7, 7, 7, 7]))
        print(deviation([32, 88, 20, 26, 14, 24, 26, 44, 14, 94,
                         94, 72, 8, 46, 92, 50, 38, 56, 60, 84]))
    

    The expected program output should be:

    0.0
    5.0
    1.4142135623730951
    0.0
    28.673855687716646
    
  6. Write a program called compress.py. Define in this program a function called compress(x) that takes a list x as its argument. If x contains consecutive repeated elements, they should be replaced with a single copy of that element. The order of the elements should not be changed.

    Test your program with the following main() function:

    def main():
        print(compress(['a', 'a', 'a', 'a', 'b', 'c', 'c', 'a',
                        'a', 'd', 'e', 'e', 'e', 'e']))
        print(compress(['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a',
                        'a', 'a']))
        print(compress(['a', 'b', 'c', 'd']))
        print(compress([]))
    

    The expected program output should be:

    ['a', 'b', 'c', 'a', 'd', 'e']
    ['a']
    ['a', 'b', 'c', 'd']
    []