In this example we have two ways to access to the list ``[1, 2]``.

If we modify the state of the list itself, but not the references to this object, then the two variables ``x`` and ``y`` still reference the list containing

``[1, 2, 3, 4]``.

Exercise

--------

wihout using python shell, what is the results of the following statements:

.. note::

sum is a function which return the sum of each elements of a list.

::

.. note::

``sum`` is a function that returns the sum of all the elements of a list.

Wihout using the Python shell, tell what are the effects of the following statements::

x = [1, 2, 3, 4]

x[3] = -4 # what is the value of x now ?

y = sum(x)/len(x) #what is the value of y ? why ?

y = 0.5

.. warning::

x[3] = -4 # What is the value of x now?

y = sum(x) / len(x) # What is the value of y? Why?

Solution (using the Python shell ;) )::

>>> x = [1, 2, 3, 4]

>>> x[3] = -4

>>> x

[1, 2, 3, -4]

>>> y = sum(x) / len(x)

>>> y

0.5

Here, we compute the mean of the values contained in the list ``x``, after having changed its last element to -4.

In python2 the result is ::

.. .. warning::

y = 0

..In python2 the result is ::

because sum(x) is an integer, len(x) is also an integer so in python2.x the result is an integer,

.. y = 0

.. because sum(x) is an integer, len(x) is also an integer so in python2.x the result is an integer,

all the digits after the periods are discarded.

Exercise

--------

Draw the representation in memory of the following expressions. ::

Draw the representation in memory of the ``x`` and ``y`` variables when the following code is executed::

x = [1, ['a','b','c'], 3, 4]

x = [1, ['a','b','c'], 3, 4]

y = x[1]

y[2] = 'z'

# what is the value of x?

# What is the value of x?

.. figure:: _static/figs/list_2-1.png

:width: 400px

:alt: set

:figclass: align-center

.. container:: clearer

.. image :: _static/figs/spacer.png

When we execute *y = x[1]*, we create ``y`` wich reference the list ``['a', 'b', 'c']``.

When we execute *y = x[1]*, we create ``y`` which references the list ``['a', 'b', 'c']``.

This list has 2 references on it: ``y`` and ``x[1]`` .

.. figure:: _static/figs/list_2-2.png

:width: 400px

:alt: set

:figclass: align-center

.. container:: clearer

.. image :: _static/figs/spacer.png

This object is a list so it is a mutable object.

So we can access **and** modify it by the two ways ``y`` or ``x[1]`` ::

x = [1, ['a','b','z'], 3, 4]

Exercise

--------

...

...

@@ -177,17 +188,23 @@ or ::

Exercise

--------

generate a list containing all codons.

.. note::

A codon is a triplet of nucleotides.

A nucleotide can be one of the four letters A, C, G, T

Write a function that returns a list containing strings representing all possible codons.

Write the pseudocode before proposing an implementation.

pseudocode:

"""""""""""

| *function all_codons()*

| *all_codons <- empty list*

| *let varying the first base*

| *for each first base let varying the second base*

| *for each combination first base, second base let varying the third base*

| *let vary the first base*

| *for each first base let vary the second base*

| *for each combination first base, second base let vary the third base*

| *add the concatenation base 1 base 2 base 3 to all_codons*

| *return all_codons*

...

...

@@ -201,14 +218,14 @@ first implementation:

python -i codons.py

>>> codons = all_codons()

:download:`codons.py <_static/code/codons.py>` .

:download:`codons.py <_static/code/codons.py>`.

second implementation:

""""""""""""""""""""""

Mathematically speaking the generation of all codons can be the cartesian product

between 3 vectors 'acgt'.

between 3 vectors 'acgt'.

In python there is a function to do that in ``itertools module``: `https://docs.python.org/3/library/itertools.html#itertools.product <product>`_

...

...

@@ -220,14 +237,14 @@ In python there is a function to do that in ``itertools module``: `https://docs.

>>> s = ">{name} {comment}\n{sequence}".format(id=id, comment=comment, sequence=sequence)

or

>>> s = f""{name} {comment} \n{sequence}"

>>> s = f">{name} {comment}\n{sequence}"

Exercise

--------

For the following exercise use the python file :download:`sv40 in fasta <_static/code/sv40_file.py>` which is a python file with the sequence of sv40 in fasta format

already embeded, and use python -i sv40_file.py to work.