Python for scientists

Apprendre un langage demande de se familiariser avec un interface, un outil de travail convivial, flexible et sympathique. J’essaie donc Thonny, disponible sur Linux (sur le Raspberry Pi 400 initialement). C’est un langage INTERPRÉTÉ, et non compilé. C’est un langage compréhensible en environnement Mac OS, Linux/Unix ou Windows. La même expérience pourrait se faire en mode terminal, lorsque Python est installé sur l’ordinateur.

Juste une première commande rends l’expérience concluante:

C’est comme essayer différentes librairies, juste pour le fun:

import antigravity

Après quelques essais avec Thonny, on atteind ses limites. C’est bien pour s’initier à la programmation… de base.

De programmer dans un fichier texte notre code, et de le tester en mode terminal est un bon moyen pour apprendre aussi.

On retrouve sur certains tutoriels des utilisateurs en environnement Windows qui utilisent une VirtualBox, un émulateur d’environnement Debian Linux.

Parfois, on peut avoir besoin de faire exécuter un script en passant des arguments (paramètres) à notre code:

Parfois, il faut faire des conversions de conventions d’écritures entre les versions de Python (nous en sommes è la version 3 actuellement).

Mais le meilleur outil vraiment performant demeure avec l’interface de Jupyter NoteBooks, ou bien avec Visual Studio Code!!!

Exercice de réchauffement:


En Python, un object (objet) et un identifier (identifiant) sont deux concepts liés mais distincts :
1. Object (Objet)
Un objet est une instance d’une classe, représentant une structure de données avec :
Un type (par exemple, int, str, list, ou une classe personnalisée).
Une valeur (le contenu de l’objet).
Un identifiant unique (adresse mémoire, accessible via id(obj)).

Exemple :
x = 42 # 42 est un objet de type `int`

2. Identifier (Identifiant)
Un identifiant est un nom utilisé pour faire référence à un objet (variable, fonction, classe, etc.).
Il agit comme une étiquette (ou un pointeur) vers l’objet en mémoire.

Exemple :
y = "hello" # `y` est un identifiant qui référence l'objet `"hello"`

Différence claire :
L’objet est la donnée réelle en mémoire.
L’identifiant est le nom que vous utilisez pour accéder à cet objet.

Exemple illustratif :
a = [1, 2, 3] # `a` est un identifiant référençant un objet `list` b = a # `b` est un autre identifiant pour le même objet print(id(a) == id(b)) # True (même objet en mémoire)

Cas particulier : Mutabilité
Pour les objets mutables (comme les listes), modifier l’objet via un identifiant affecte toutes les références :
a.append(4) print(b) # [1, 2, 3, 4] (car `a` et `b` pointent vers le même objet)

Résumé :
Concept
Description
Exemple
Object
Donnée en mémoire avec un type et un ID.
42, "hello", [1, 2]
Identifier
Nom utilisé pour référencer un objet.
x, ma_liste, func

En résumé, un identifiant est comme une étiquette, tandis qu’un objet est la « chose » à laquelle l’étiquette est collée.

En Python, un objet mutable est un objet dont l’état (la valeur) peut être modifié après sa création. En d’autres termes, on peut changer les valeurs contenues dans un objet mutable sans créer un nouvel objet. Les listes, les dictionnaires et les ensembles sont des exemples de types de données mutables. 


En Python, tuples, sets, lists et dictionaries sont des structures de données différentes, chacune avec ses propres caractéristiques et cas d’utilisation. Voici leurs différences :

1. List (list)

  • Mutable (modifiable après création).
  • Ordonnée (les éléments ont un index).
  • Permet les doublons.
  • Délimitée par des crochets [].
  • Utilisée pour stocker une collection ordonnée d’éléments.

Exemple :

ma_liste = [1, 2, 3, 2]  # Valide
ma_liste[0] = 10  # Modifiable

2. Tuple (tuple)

  • Immutable (non modifiable après création).
  • Ordonné (accès par index).
  • Permet les doublons.
  • Délimité par des parenthèses ().
  • Utilisé pour des données fixes (coordonnées, configurations, etc.).

Exemple :

mon_tuple = (1, 2, 3, 2)  # Valide
mon_tuple[0] = 10  # Erreur (immutable)

3. Set (set)

  • Mutable (modifiable, mais ses éléments doivent être immuables).
  • Non ordonné (pas d’index).
  • Pas de doublons (stocke des éléments uniques).
  • Délimité par des accolades {} ou set().
  • Optimisé pour les tests d’appartenance (in) et les opérations ensemblistes (union, intersection).

Exemple :

mon_set = {1, 2, 3, 2}  # Devient {1, 2, 3}
mon_set.add(4)  # Valide

4. Dictionnaire (dict)

  • Mutable (modifiable).
  • Non ordonné (avant Python 3.7, ordonné ensuite).
  • Stocke des paires clé-valeur (key: value).
  • Clés uniques (pas de doublons), valeurs peuvent être dupliquées.
  • Délimité par des accolades {} avec clé: valeur.

Exemple :

mon_dict = {"nom": "Alice", "âge": 25}
mon_dict["ville"] = "Paris"  # Ajout/modification possible

Résumé Comparatif

CaractéristiqueList ([])Tuple (())Set ({})Dict ({key: value})
MutableOuiNonOuiOui
OrdonnéOuiOuiNonOui (depuis Python 3.7)
DoublonsOuiOuiNonClés uniques
AccèsPar indexPar indexBoucle/inPar clé
Cas d’usageCollection modifiableDonnées fixesÉléments uniquesAssociation clé-valeur

Quand utiliser chaque structure ?

  • Liste : Quand on a besoin d’une collection ordonnée et modifiable.
  • Tuple : Pour des données immuables (ex : clés de dictionnaire, retour multiple de fonctions).
  • Set : Pour éliminer des doublons ou faire des opérations ensemblistes.
  • Dictionnaire : Pour représenter des données structurées (ex : JSON, bases de données).


Le Zen de Python


A Python Style Guide

  • Keep your code tidy and well-readable.
  • Provide comments in your code.
  • Group your code into blocks, separated by blank lines.
  • Use indentation wisely.
  • Pick meaningful names for your identifiers.

Listes

On peut aussi préciser le pas en ajoutant un symbole deux-points supplémentaire et en indiquant le pas par un entier :

Liste de listes


Créez quatre listes hiver, printemps, ete et automne contenant les mois correspondants à ces saisons. Créez ensuite une liste saisons contenant les listes hiver, printemps, ete et automne. Prévoyez ce que renvoient les instructions suivantes, puis vérifiez-le dans l’interpréteur :

  1. saisons[2]
  2. saisons[1][0]
  3. saisons[1:2]
  4. saisons[:][1]. Comment expliquez-vous ce dernier résultat ?

Définition

hiver     = ["décembre", "janvier", "février"]
printemps = ["mars", "avril", "mai"]
été       = ["juin", "juillet", "août"]
automne   = ["septembre", "octobre", "novembre"]
saisons   = [hiver, printemps, été, automne]

Résultats attendus / observés

  1. saisons[2]['juin', 'juillet', 'août']
    Retourne la troisième sous-liste (été).
  2. saisons[1][0]'mars'
    On prend la deuxième sous-liste (printemps), puis son premier élément.
  3. saisons[1:2][['mars', 'avril', 'mai']]
    Le slicing retourne une liste contenant les éléments de l’indice 1 à 2 (exclu) : ici une liste d’un seul élément, qui est la sous-liste printemps.
  4. saisons[:][1]['mars', 'avril', 'mai']
    saisons[:] fait une copie superficielle de la liste saisons (même références aux sous-listes), puis [1] en extrait directement la sous-liste printemps.

Pourquoi saisons[:][1] donne le même résultat que saisons[1] et pas une liste imbriquée ?

  • saisons[:] crée une copie superficielle de la liste extérieure ; c’est une nouvelle liste dont les éléments sont les mêmes objets (les sous-listes).
  • Ensuite, [1] indexe cette copie pour en extraire l’élément d’indice 1, donc la sous-liste printemps elle-même.
  • En revanche, saisons[1:2] fait un slicing qui retourne une liste contenant cet élément, d’où la différence de niveau d’imbrication.
  • On peut vérifier que saisons[1] is saisons[:][1] est True, donc ce n’est pas une nouvelle sous-liste, c’est la même référence.

Résumé

  • saisons[2] → sous-liste été.
  • saisons[1][0] → chaîne 'mars'.
  • saisons[1:2] → liste contenant la sous-liste printemps.
  • saisons[:][1] → la sous-liste printemps directement (comme saisons[1]), parce que on a copié l’extérieur puis indexé.

Published by:

Avatar de Inconnu

jasmin.tremblay

"Si tu veux construire un bateau, ne rassemble pas tes hommes et femmes pour leur donner des ordres, pour expliquer chaque détail, pour leur dire où trouver chaque chose... Si tu veux construire un bateau, fais naître dans le cœur de tes hommes et femmes le désir de la mer." Antoine de Saint-Exupéry

Laisser un commentaire

Laisser un commentaire