AMU :: Polytech Biotech 3A :: JGB53D :: 2014/2015 :: Jacques van Helden, Denis Puthier, Nicolas Terrapon


Contenu

  1. Python
  2. Objectifs du TD
  3. Ouvrir une session
  4. Hello world
  5. Création de variables
  6. En Python, les variables sont associées à des méthodes
  7. Listes et tuples
  8. Dictionnaires
  9. Pour aller plus loin

[Retour à la table des matières]


Python ?

Le langage de programmation Python a été développé par Guido van Rossum. Sa première version date de 1991. Python fonctionne sous Windows, Linux/Unix et Mac OS X. Le langage Python est sous licence open-source ce qui le rend utilisable gratuitement et distribuable même pour des applications commerciales. Python a été developpé afin de procurer un langage très lisible à la communauté. L'idée est de proposer un langage très proche du langage naturel et éloigné de certains langages dont le code peut rapidement devenir obscur ("obfuscating code"). Par ailleurs le but de python est de proposer un langage simple, standardisé dont l'une des devise est: "There should be one — and preferably only one — obvious way to do it".

Python est un langage puissant, assez facile d'apprentissage et qui propose une palette d'outils très large. Il peut être notamment utilisé pour:

  • Le développement de scripts (e.g convertisseurs de formats pour des fichiers de données).
  • Le développement d'applications en lignes de commandes.
  • Le développement d'applications web.
  • Le développement de d'interfaces graphiques ("Graphical User Interfaces", GUIs).
  • Communiquer avec des bases de données.
  • L'analyse de données numériques (issues des domaines de la bioinformatique, physique,...).
  • ...

[Retour à la table des matières]


Objectifs du TD

Au fil de ce TD, nous allons présenter un certain nombre de structures de données. Ces structures (variables, listes, dictionnaires,...) permettent d'organiser l'information en mémoire et nous permettront, lors les TDs suivants, de réaliser des programmes s'appuyant sur celles-ci.

[Retour à la table des matières]


Ouvrir une session

Démarrez un terminal

  1. Connectez vous à l'ordinateur avec votre nom d'utilisateur et mot de passe.
  2. Ouvrez un terminal (cf TD01).

Dans le terminal, tapez la commande suivante qui devrait vous permettre de démarrer un interpréteur Python (ici pour la version 3 du langage python).

ipython3 # Démarrage de l'interpréteur python.

Le programme IPython est un interpréteur python, ce qui signifie qu'il comprendra les instructions Python que vous lui soumettez et qu'il les exécutera l'une après l'autre. Ceci permet de tester de simples commandes, sans nécessiter de les sauvegarder dans un fichier.

[Retour à la table des matières]


Hello world

Comme premier contact avec un langage de programmation, la coutume est de créer un programme qui imprime à l'écran le message "Hello world". Nous ne dérogerons pas à l'usage.

Copiez l'instruction suivante dans l'interpréteur.

In [3]:
# On demande à python de dire  "Hello world"
print("Hello world")
Hello world

Manipulation de variables

En informatique, les variables associent un nom (l'identifiant) à une valeur. Créer une variable est très simple, il suffira d'utiliser l'opérateur d'affectation '=' (aussi appelé opérateur d'assignation).

En Python, les variables sont typées, c'est-à-dire qu'une variable présentera des comportements différents en fonction des types d'information qu'elle contient (nombres entiers, nombres décimaux, chaînes de caractères, ...).

Variables numériques

Copiez-collez les instructions suivantes dans iPython, ligne par ligne. Analysez les résulats et tentez de comprendre la façon dont l'interpréteur traite ces commandes. Certains résultats seront parfois un peu déroutants pour les débutants, mais leur logique sera discutée durant les TD, et l'usage du langage s'éclairera au fil de la progression du cours.

In [4]:
# Note: tout ce qui se trouve à droite du caractère '#' 
# est un commentaire (non interprété par python)

# On affecte la valeur '2' à une variable qu'on appelle 'a'
a = 2

# Quel est la valeur contenue dans a ?
a

# Quel est le type de cette variable ?
type(a) # Réponse: int (integer). La variable contient un nombre entier.

# On affecte la valeur 2.0 à a
a = 2.0

# Quel est le type de cette variable ?
type(a) # float (float). Un nombre à virgule flottante (i.e un réel).

# On affecte la valeur 4 à b
b = 4

# Quel est la valeur de b ?
b

# c contient la somme des valeurs courantes de  a et b 
c = a + b

# Quelle est la valeur de  c ? Quel est le type de c ?
c
type(c)

# Remémorons-nous les valeurs des variables (a, b, c)
print (a,b,c)
2.0 4 6.0

Dans l'exemple précédent, nous avons assigné des valeurs aux variables a (a=2.0) et b (b=4), puis assigné à la variable c le résultat d'un calcul (c=a+b). Conformément à nos attentes, la variable c contient le résultat de la somme de a et b.

Que ce passe-t-il si on change la valeur de b ?

In [6]:
b = 10 
print(a,b,c) # expliquez
2.0 10 6.0

Le fait de changer la valeur de b n'a pas affecté le contenu de la variable c. En mathématique, quand on écrit une équation (par exemple c = a + b, la relation ainsi définie prend valeur de vérité pour l'ensemble des développements ultérieurs. Il en va autrement en programmation: l'assignation c=a+b a pour effet de créer ou modifier le contenu d'un espace de mémoire. Si l'on change ensuite le contenu d'une des variables impliquées dans la relation (b=10), la variable c n'a pas de raison de changer tant qu'on ne l'a pas ré-assignée.

In [8]:
# Re-calculer la somme des valeurs de a et b, 
# et mettre à jour le contenu de la variable c
c = a + b

# la valeur de c correspond maintenant à la somme de a et b
print(a,b,c)
2.0 10 12.0

Ce type de notation permet notamment d'incrémenter le contenu d'une variable, en ajoutant une valeur (par exemple la constante 1) à son propre contenu.

In [9]:
d = 0
print(d)

d = d+1
print(d)

d = d+1
print(d)

d = d+1
print(d)
0
1
2
3

On constate, ici encore, la différence entre la formulation mathématique d'une équation et l'assignation d'une variable en programmation. En mathématiques, l'équation d=d+1 est fausse, puisqu'il est impossible qu'un nombre soit égal à la somme de sa valeur et du nombre 1. En informatique, l'instruction d=d+1 est parfaitement valide, elle indique qu'il faut incrémenter d'une unité le contenu de la variable d.

Calcul sur des variables

Les opérateurs mathématiques classiques peuvent être utilisés sur des entiers et flottants.

In [14]:
a = 4.0
type(a) # vérifions le type de la variable 'a'. Elle contient un nombre décimal
Out[14]:
float
In [17]:
a/3
Out[17]:
1.3333333333333333
In [15]:
type(a*3)
Out[15]:
float
In [16]:
# On peut donc utiliser IPython comme une calculatrice
3*(2+4)
Out[16]:
18

Effectuez les exercices suivants:

  • Créez une variable i et assignez lui la valeur 100.
  • Quel est le type de i.
  • Créez une variable j et assignez lui la valeur 5.0.
  • Quel est le type de j ?
  • Créez la variable k qui contient la somme de i et j.
  • Quel est le type de k ?

Solution

In [18]:
i = 100     # on assigne 100 à i
type(i)     # Le type de i (int)
Out[18]:
int
In [19]:
j = 5.0     # j vaut 5.0    
type(j)     # j est un float.
Out[19]:
float
In [20]:
k = i + j   # k prend la somme
type(k)     # k est un float
Out[20]:
float

Variables de type 'chaînes de caractères'

Assignation d'une variable à une chaîne de caractères

Copiez-collez les instructions suivantes dans IPython, ligne par ligne, et tentez d'interpréter le résultat.

In [23]:
# On peut affecter une chaîne de caractères à une variable
# Cette variable est alors de type "chaîne de caractères". 
nom_de_fichier = "refGene"
type(nom_de_fichier) # str (string). Une chaîne de charactères.
Out[23]:
str
In [24]:
# Que contient la variable nom_de_fichier ? 
nom_de_fichier
Out[24]:
'refGene'

Notez qu'en tapant simplement le nom de la variable comme ci-dessus, Python affiche son contenu entre guillemets simple ('apostrophes'), pour indiquer qu'il s'agit d'une chaîne de caractères.

On peut afficher le contenu de la variable en utilisant la fonction Python print(). Notez que cette fonction affiche le contenu sans l'entourer de guillemets.

In [25]:
# Imprimer le contenu de la variable nom_de_fichier
print(nom_de_fichier)

# Notez que la commande suivante produit une erreur.
nom_de_fichier = refGene  
# Comment expliquez-vous cette erreur ?
refGene

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-25-2862ccca514c> in <module>()
      3 
      4 # Notez que la commande suivante produit une erreur.
----> 5 nom_de_fichier = refGene
      6 # Comment expliquez-vous cette erreur ?

NameError: name 'refGene' is not defined

Dans le cas ci-dessus, nous avons demandé à Python de copier le contenu d'une variable appelée refGene dans une autre variable appelée nom_de_fichier. Cependant il n'existe pas de variable nommée refGene (puisque nous n'en avons pas défini).

Ceci illustre un aspect important de la syntaxe: pour spécifier le contenu d'une chaîne de caractères, il faut entourer ce contenu de délimitateurs (guillemets simples ou doubles). Un mot sans délimitateurs sera interprété comme nom de variable, et non comme chaîne de caractère.

Concaténation

En Python, la concaténation de chaînes de caractères se fait très simplement au moyen de l'opérateur "+".

In [26]:
# On affecte la valeur ".txt" à une variable nommée 'extension'
extension = ".txt"

# Quel est le contenu de la variable extension ? 
print(extension)
.txt

In [27]:
# Quel est son type ?
type(extension)
Out[27]:
str
In [28]:
# On peut 'concaténer' des chaînes de caractères avec l'opérateur +
nom_complet = nom_de_fichier + extension
print(nom_complet)
refGene.txt

In [29]:
# Attention on ne peut concaténer que des chaînes entre elle:
a = 2.0
type(a)
Out[29]:
float
In [30]:
type(nom_de_fichier)
Out[30]:
str
In [33]:
# Pour concaténer nom_de_fichier et la variable a, il faut
# convertir cette dernière en chaîne de caractère:

#nom_de_fichier + a # Quelle erreur est renvoyée ?
nom_de_fichier + str(a) # maintenant ça fonctionne
Out[33]:
'refGene2.0'
In [32]:
# La fonction str() utilisée ci-dessus a pour effet de
# convertir une variable en une chaîne de caractère.
str(27)
Out[32]:
'27'

Notez que Python affiche '27', avec des guillements, pour indiquer qu'il s'agit d'une chaîne de caractères.

On peut répéter des chaines en les multipliant par un entier.

In [34]:
nom_de_fichier * 10
Out[34]:
'refGenerefGenerefGenerefGenerefGenerefGenerefGenerefGenerefGenerefGene'
In [35]:
a = 3.0
type(a) # Et pourquoi pas un entier ? Expliquez. 
nom_de_fichier * a # ne fonctionne pas car a n'est pas un entier.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-35-623f7eb6f39c> in <module>()
      1 a = 3.0
      2 type(a) # Et pourquoi pas un entier ? Expliquez.
----> 3 nom_de_fichier * a # ne fonctionne pas car a n'est pas un entier.

TypeError: can't multiply sequence by non-int of type 'float'
In [36]:
nom_de_fichier * int(a) # en convertissant a en entier ça fonctionne 
Out[36]:
'refGenerefGenerefGene'

On peut aussi utiliser la fonction print() pour afficher le contenu d'une ou plusieurs variables.

In [38]:
 print(c)
12.0

In [39]:
print(nom_complet) 
refGene.txt

In [40]:
# La commande print() peut traiter une liste de variables
x = 'alfred'
y = 'sarah'
z = 'mélanie'
print(x,y,z)
alfred sarah mélanie

In [41]:
# La liste peut contenir des variables de types différents
print(c, nom_de_fichier, c, 2, 2.0)
12.0 refGene 12.0 2 2.0

Pour les textes sur plusieurs lignes, on utilisera une 'docstring', en marquant le début et la fin par des triplets de guillemets

In [42]:
phrase = """Ceci
est une phrase
sur plusieurs lignes
"""

print(phrase)
Ceci
est une phrase
sur plusieurs lignes


Effectuez les exercices suivants:

  • Créez une variable repetition qui contiendra un motif composé d'un triplet du sous-motif TTG suivis d'une occurrence de AAA. Ce motif sera répété 100 fois. (TTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAA...)

Solution

In [43]:
("TTG" * 3 + "AAA" ) * 100
Out[43]:
'TTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAATTGTTGTTGAAA'

Note à propos des conversions ("coercition", "cast" en anglais)

Python permet d'effectuer un certain nombre de conversions entre types de variables (comme vu précédemment avec str()). Un certain nombre d'exemples sont montrés ci-dessous qui illustrent les comportements des fonctions de conversion en fonction des types qui sont entrés en paramètres.

Copiez collez les instructions suivantes une ligne après l'autre dans l'interpréteur.

In [46]:
####################################
### Coercition à partir d'un entier
####################################
a = 2
float(a)  # Vaut 2.0
str(a)    # Vaut '2' . Les guillemets indiquent que c'est une chaîne de caractères.

####################################
### Coercition à partir d'un réel
####################################
a=2.9
int(a)        # Vaut 2. Seule la partie entière est préservée
str(a)        # Vaut '2.9'. Les guillemets indiquent que c'est une chaîne de caractères.

#####################################################
### Coercition partir d'une chaîne de caractères
#####################################################
int("2")        # Vaut 2. Fonctionne
float("2.9")    # Vaut 2.9. Fonctionne
float("1.3e-3") # Vaut 0.0013. Fonctionne

# La coercition vers des nombres suppose une chaîne de caractères compatibble avec des nombres.
# int("A")     # Erreur. Cette transformation est impossible.
# float("A")   # Erreur. Cette transformation est impossible.
# Les deux instructions précédentes retournent des erreurs, car
# la chaîne de caractère "A" ne peut pas être interprétée comme
# un nombre.

#int("2.9")   # Erreur : cette chaîne de caractère ne peut pas être convertie en entier
float("2.9") # Ici, ça marche
int(float("2.9")) # Ca fonctionne. 
Out[46]:
2

Le dernier exemple peut sembler étonnant: la conversion de "2.9" en entier ne fonctionne pas, mais la double coercition fonctionne parce que le résultat de la première conversion fournir une variable de type float, de de valeur 2.9, qui peut être convertie en variable entière (la coercicion de fload à int a pour effet de tronquer les décimales).

Variables booléennes

Une variable booléenne est une variable à deux états: vrai ou faux. En python une variable booléenne pourra prendre la valeur True ou False. Nous reviendrons sur ces variables dans les TD suivant lors de la présentation des structures conditionnelles.

Copiez collez les instructions suivantes une ligne après l'autre dans l'interpréteur.

In [48]:
d = True
c = False

# On peut ensuite effectuer des opérations logiques entre variables Booleennes
d
not d
not c
d and c
d or c
d and (not c)
Out[48]:
True

Noms réservés

Attention: certains noms sont réservés en Python. Cela signifie que vous ne pouvez pas les utiliser comme noms de variables. La liste des noms réservés peut être trouvée ici.

In [49]:
# La commande suivante ne fonctionnent pas, car elle utilise un mot réservé.
# les mots réservés (and, if, ...) ont un sens particulier en
# Python, on n'a donc pas le droit de les utiliser comme noms de
# variables.

and = "et"
  File "<ipython-input-49-89d152a17f27>", line 6
    and = "et"
      ^
SyntaxError: invalid syntax

[Retour à la table des matières]


En Python, les variables sont associées à des méthodes

Les variables dans python sont en fait des objets associés à des méthodes (nous reverrons cela en détail plus tard). Cela signifie que, suivant la classe de l'objet (e.g un entier, une chaîne de caractères, ...) un certain nombre de procédures spécifiques peuvent êtres appliquées en appelant la méthode correspondante.

Tapez le code suivant dans l'interpréteur python

In [50]:
dna="ATACTAGAATTCGATAGGTGGTAAAACCCG"

# De quoi s'agit-il ? 
type(dna)
Out[50]:
str
In [52]:
# Cherchons de l'aide sur la classe str (string)

# help(str)

# Tapez q pour quitter l'aide.

# Notez la variété de méthodes disponibles.

## Pour sortir de l'aide, tapez la touche 'q'

# Notez que les méthodes entourées de tirets soulignés
# ("__method__") doivent être utilisées comme indiqué.
#
# x.__len__() <==> len(x) signifie que l'on écrira 
len(dna)
Out[52]:
30
In [53]:
# et non pas 
dna.__len__()
# qui bien que fonctionnelle est moins lisible.
Out[53]:
30
In [54]:
# Toutes les autres méthodes (sans tirets soulignés) sont à
# utiliser en suffixant la variable d'un "." suivi du nom de la
# méthode.

# Exemple: convertir la séquence d'ADN en minuscules
dna.lower()
Out[54]:
'atactagaattcgataggtggtaaaacccg'

Consultez l'aide sur la classe str. En utilisant les méthodes disponibles, répondez au question suivantes:

  • Quelle est la taille de la chaîne de caractères stockée dans la variable dna ?
  • Est-ce que la chaîne de caractère dna se termine par CCG ? (utilisez une méthode qui répond directement à cette question)
  • Est-ce que la chaîne contient un site de reconnaissance pour EcoR1 "GAATTC". A quelle position ?
  • Transformez le site ecoR1 en site BglII ("AGATCT").
  • Transformez le site BglII par une succession (n = 3) de site ecoR1 et BglII ("AGATCT").
  • Transformez la chaîne en minuscules.
In [56]:
len(dna)
Out[56]:
30
In [57]:
dna.endswith("CCG")
Out[57]:
True
In [58]:
dna.find("GAATTC") # On commence à compter à 1 ou à 0 ?
Out[58]:
6
In [59]:
dna = dna.replace("GAATTC", "AGATCT") # Attention il faut 'écraser' la variable dna.
print(dna)
ATACTAAGATCTGATAGGTGGTAAAACCCG

In [60]:
dna = dna.replace("AGATCT", ("GAATTC" + "AGATCT") * 3) # succession de ecoR1 et BglII
print(dna)
ATACTAGAATTCAGATCTGAATTCAGATCTGAATTCAGATCTGATAGGTGGTAAAACCCG

In [62]:
print(dna.lower())
atactagaattcagatctgaattcagatctgaattcagatctgataggtggtaaaacccg

[Retour à la table des matières]


Listes et tuples

Listes

Une liste peut être vue comme un tableau qui permet de stocker des objets.

Création et indexation des listes

In [63]:
############################
### Créer une liste vide ###
############################
ma_liste = list() # or ma_liste = []
len(ma_liste) # contient 0 éléments
Out[63]:
0
In [64]:
################################################################################################
### Créer une liste contenant un ensemble d'éléments pré-définis (ici des symboles de gènes) ###
################################################################################################
liste_de_genes = ["CD3E", "CD4", "CD8", "CD5", "ZAP70", "ITK", "LAT","VAV1","CD3G","TCRA"]
liste_de_genes
Out[64]:
['CD3E', 'CD4', 'CD8', 'CD5', 'ZAP70', 'ITK', 'LAT', 'VAV1', 'CD3G', 'TCRA']
In [67]:
##########################################################
### Extraire un sous ensemble par index.
##########################################################

# Notez qu'on commence à la position 0
liste_de_genes[0]
Out[67]:
'CD3E'
In [66]:
liste_de_genes[1]
Out[66]:
'CD4'
In [68]:
# Indexer depuis la fin
liste_de_genes[-1]
Out[68]:
'TCRA'
In [69]:
liste_de_genes[-2]
Out[69]:
'CD3G'
In [70]:
# Prendre une 'tranche' (slice) de cette liste 
# liste_de_genes[début:fin] # de  début à fin-1
liste_de_genes[0:2]
Out[70]:
['CD3E', 'CD4']
In [71]:
liste_de_genes[0:5]
Out[71]:
['CD3E', 'CD4', 'CD8', 'CD5', 'ZAP70']
In [72]:
# Extraire les derniers éléments d'une liste
# liste_de_genes[début:] # de début jusqu'à la fin
liste_de_genes[1:]
Out[72]:
['CD4', 'CD8', 'CD5', 'ZAP70', 'ITK', 'LAT', 'VAV1', 'CD3G', 'TCRA']
In [73]:
liste_de_genes[5:]
Out[73]:
['ITK', 'LAT', 'VAV1', 'CD3G', 'TCRA']
In [74]:
# Extraire les premiers éléments d'une liste
# liste_de_genes[:fin] # De la première position jusqu'à fin-1  
liste_de_genes[:4]
Out[74]:
['CD3E', 'CD4', 'CD8', 'CD5']
In [75]:
# Spécifier l'incrément (le "pas") d'un parcours de liste.
# liste_de_genes[début:fin:p] # de début à fin-1 par incrément de p
liste_de_genes[0:10:2] 
Out[75]:
['CD3E', 'CD8', 'ZAP70', 'LAT', 'CD3G']
In [76]:
liste_de_genes[0::2] # liste_de_genes[0:10:2]
Out[76]:
['CD3E', 'CD8', 'ZAP70', 'LAT', 'CD3G']
In [77]:
liste_de_genes[::-1] # La liste à l'envers
Out[77]:
['TCRA', 'CD3G', 'VAV1', 'LAT', 'ITK', 'ZAP70', 'CD5', 'CD8', 'CD4', 'CD3E']
In [78]:
########################################
### Changer les éléments d'une liste ###
########################################
liste_de_genes[5:] = ['CD52','SATB1']
print(liste_de_genes)
['CD3E', 'CD4', 'CD8', 'CD5', 'ZAP70', 'CD52', 'SATB1']

In [79]:
# Note: nous venons de changer la longueur de la liste, en
# remplaçant les 5 derniers éléments d'une liste de 10 éléments
# par une nouvelle liste de 2 éléments
len(liste_de_genes)
Out[79]:
7
In [80]:
####################################################
### Notez qu'une chaîne de caractère peut être   ###
### considérée comme une liste dont les élements ###
### ne peuvent être modifiés.                    ###
####################################################
dna[3:]
Out[80]:
'CTAGAATTCAGATCTGAATTCAGATCTGAATTCAGATCTGATAGGTGGTAAAACCCG'
In [81]:
dna[::-1] # Qu'obtenez-vous en utilisant un incrément de -1?
Out[81]:
'GCCCAAAATGGTGGATAGTCTAGACTTAAGTCTAGACTTAAGTCTAGACTTAAGATCATA'
In [82]:
dna[25:]= 'TTTTT' # que dit le message d'erreur ?
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-82-1553c4fb384a> in <module>()
----> 1 dna[25:]= 'TTTTT' # que dit le message d'erreur ?

TypeError: 'str' object does not support item assignment

Méthodes pour les listes

Comme tout objet, les listes ont un ensemble de méthodes associées. Copiez collez les instructions suivantes dans l'interpréteur IPython.

In [83]:
########################################
#### Get help about the class 'list' ###
########################################
# help(list)
# q pour quitter

########################################
### Quelques méthodes classiques    ####
######################################## 
len(liste_de_genes)             # Nombre d'éléments
liste_de_genes + liste_de_genes # Concaténer deux listes
'LAT' in liste_de_genes         # Est-ce que cet élément est contenu dans ma liste
del liste_de_genes[5]           # Déléter le 6ème élément ('ITK')
liste_de_genes*3                # Concaténer 3 fois la liste
liste_de_genes.append('BCL2')   # Ajouter BCL2 à la fin de la liste 
liste_de_genes
liste_de_genes.count('CD3E')    # Compter le nombre d'occurrences de 'CD3E'
gene = liste_de_genes.pop(2)    # Déléter et renvoyer le 3ème élément de la liste (CD8)
gene 
liste_de_genes.sort()           # Trier la liste
liste_de_genes.sort(reverse=True)
liste_de_genes.insert(2,'P53')  # Insérer un élément avant une position donnée
liste_de_genes.remove('P53')    # Delete a given object from the list 

Consultez l'aide sur la classe str. En utilisant les méthodes disponibles, répondez au question suivantes:

  • Créez une liste contenant les chaînes de caractères "GAATTC", "AGATCT" et "GGTGG".
  • Quelle est la taille de cette liste.
  • Utilisez l'opérateur de multiplication pour créez une liste contenant 10 répétitions de la liste initiale.
  • Utilisez la méthode sort pour trier cette liste.
  • Transformez cette liste en chaine de caractères à l'aide de la méthode 'join'.
In [84]:
ma_list = ["GAATTC", "AGATCT", "GGTGG"]
ma_list = ma_list * 10
ma_list.sort()          # pas besoin d'assigner !
ma_chaine = "".join(ma_list)
print(ma_chaine)
AGATCTAGATCTAGATCTAGATCTAGATCTAGATCTAGATCTAGATCTAGATCTAGATCTGAATTCGAATTCGAATTCGAATTCGAATTCGAATTCGAATTCGAATTCGAATTCGAATTCGGTGGGGTGGGGTGGGGTGGGGTGGGGTGGGGTGGGGTGGGGTGGGGTGG

Tuples

Les tuples sont très proches des listes. Cependant une fois créés, ces objets ne peuvent pas être modifiés. Dans la syntaxe python, les listes sont déclarées en encadrant leurs éléments de crochets [ ], tandis que les tuples sont encadrés par des parenthèses ( ).

Copiez collez les instructions suivantes dans l'interpréteur IPython.

In [87]:
myTuple=('a','b')
myTuple[0]
Out[87]:
'a'
In [86]:
myTuple[0]='c' # error. On ne peut pas le modifier !
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-86-c06951e96ad7> in <module>()
----> 1 myTuple[0]='c' # error. On ne peut pas le modifier !

TypeError: 'tuple' object does not support item assignment

[Retour à la table des matières]


Les dictionnaires

Un dictionnaire ?

Un dictionnaire est un tableau permettant de stocker des informations sous la forme clef -> valeur. Cet objet est extrêmement utile au même titre que la liste. Dans d'autres langages de programmation, le dictionnaire est aussi connnu sous le nom de hash, table de hachage ou encore tableau associatif.

Copiez collez les instructions suivantes dans l'interpréteur IPython.

In [89]:
#############################################
### Créer un dictionnaire vide liste vide ###
#############################################
codon2AA = {}

############################################################
### Créer un dictionnaire contenant des clefs et valeurs ###
############################################################
# Une partie du code génétique...
codon2AA =  {"UUU":"PHE", "UCU":"SER", "CUU":"LEU","AAA":"LYS"}
In [90]:
############################################################
### Récupérer une valeur avec une clef                     ###
############################################################
codon2AA['CUU']
Out[90]:
'LEU'
In [91]:
## Si la clé n'a pas été définie, Python émet un message d'erreur
codon2AA['ABSENT']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-91-d3d8f8933643> in <module>()
      1 
      2 ## Si la clé n'a pas été définie, Python émet un message d'erreur
----> 3 codon2AA['ABSENT']

KeyError: 'ABSENT'
In [92]:
##########################################
### Ajouter une paire clef -> valeur   ###
##########################################
codon2AA['ACA'] = "THR"
codon2AA['AUG'] = "START"
codon2AA
Out[92]:
{'AUG': 'START',
 'UCU': 'SER',
 'ACA': 'THR',
 'CUU': 'LEU',
 'AAA': 'LYS',
 'UUU': 'PHE'}
In [93]:
##########################################
### Déléter un éléments                ###
##########################################
## del délète une paire clef valeur
del codon2AA["AUG"]
codon2AA
Out[93]:
{'UCU': 'SER', 'ACA': 'THR', 'CUU': 'LEU', 'AAA': 'LYS', 'UUU': 'PHE'}
In [94]:
##########################################
### Tester si une clef existe          ###
##########################################
'ACA' in codon2AA
Out[94]:
True
In [95]:
if 'ACA' in codon2AA:
    print("Oui")
Oui

[Retour à la table des matières]


Pour aller plus loin

Pour en savoir plus sur les structures de données en Python, vous pouvez consulter la documentation Python correspondante. Vous noterez notamment l'existence de Sets qui n'ont pas été traité ici et qui correspondent à des liste ordonnées non-redondante. Nous vous laissons les découvrir seuls à titre d'exercice.


In []: