Je maintiens depuis quelque temps déjà une liste de syntaxe que j’utilise régulièrement pour les avoir facilement sous la main. Aujourd’hui, je partage donc avec vous cette liste qui sera mise à jour le plus régulièrement possible.
Pour rendre cette énumération plus pratique, voici les différentes sous-sections:
LES ITÉRABLES
Un itérable est ce qui accepte l’itération, ce sur quoi on peut itérer, c’est à dire une collection dont on peut prendre les éléments un à un.
Sam & Max
Création d’un itérable
On génère une séquence allant de 1 à 50 avec un incrément de 3 et on affiche le résultat :
x = range(1,50, 3)
list(x)
Output :
[1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]
Calcul de la somme des éléments de l’itérable
On fait la somme de nos éléments contenus dans notre itérable x
sum(x)
Output :
425
Appliquer un filtre
Le filtre sur notre itérable nous retourne les nombres pairs
x_filtered = filter(lambda i: i % 2==0, x)
list(x_filtered)
Output :
[4, 10, 16, 22, 28, 34, 40, 46]
Trouver si au moins un élément de l’itérable est pair
any(i % 2==0 for i in x)
Output :
True
Trouver si tous les éléments de l’itérable sont pairs
all(i % 2==0 for i in x)
Output :
False
Appliquer une fonction « Numpy »
Calcul de la somme cumulée des éléments de notre itérable
import numpy as np
list(np.cumsum(x))
Output :
[1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425]
Renvoyer le tuple (index, valeur) de l’itérable
t = list(enumerate(x))
t
Output :
(3, 10), (4, 13), (5, 16), (6, 19), (7, 22), (8, 25), (9, 28), (10, 31), (11, 34), (12, 37), (13, 40), (14, 43), (15, 46), (16, 49)]
Pivoter la liste de tuples
list(zip(*t))
Output :
[(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), (1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49)]
Transformer un itérable en liste
s = "Le Machine Learning est quelque chose de nouveau sous le soleil : une technologie qui se construit elle-même."
l = s.split(' ')
l
Output :
['Le', 'Machine', 'Learning', 'est', 'quelque', 'chose', 'de', 'nouveau', 'sous', 'le', 'soleil', ':', 'une', 'technologie', 'qui', 'se', 'construit', 'elle-même.']
Transformer un itérable en chaine de caractères
'_'.join(l)
Output :
'Le_Machine_Learning_est_quelque_chose_de_nouveau_sous_le_soleil_:_une_technologie_qui_se_construit_elle-même.'
Trier un itérable
On applique la fonction str.lower
pour ne pas prendre en compte la casse.
ol = sorted(l, key=str.lower)
ol
Output :
[':', 'chose', 'construit', 'de', 'elle-même.', 'est', 'Le', 'le', 'Learning', 'Machine', 'nouveau', 'quelque', 'qui', 'se', 'soleil', 'sous', 'technologie', 'une']
Si l’on souhaite avoir l’index de notre chaine de caractère associer à notre sous-chaine de caractère, nous pouvons utiliser la fonction enumarate()
:
sorted(enumerate(l), key=lambda i: i[1].lower())
Output :
[(11, ':'), (5, 'chose'), (16, 'construit'), (6, 'de'), (17, 'elle-même.'), (3, 'est'), (0, 'Le'), (9, 'le'), (2, 'Learning'), (1, 'Machine'), (7, 'nouveau'), (4, 'quelque'), (14, 'qui'), (15, 'se'), (10, 'soleil'), (8, 'sous'), (13, 'technologie'), (12, 'une')]
Utiliser l’opérateur *
Pour générer un itérable avec un même élément répété 10 fois
[1] * 10
Output :
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Facilement créer un diviseur :
'-' * 20
Output :
'--------------------'
Convertir une liste de tuples en dictionnaire
dict(enumerate(l))
Output :
{0: 'Le', 1: 'Machine', 2: 'Learning', 3: 'est', 4: 'quelque', 5: 'chose', 6: 'de', 7: 'nouveau', 8: 'sous', 9: 'le', 10: 'soleil', 11: ':', 12: 'une', 13: 'technologie', 14: 'qui', 15: 'se', 16: 'construit', 17: 'elle-même.'}
Fusionner deux dictionnaires
On créé trois dictionnaires : les deux premier que l’on souhaite fusionner et une dernière qui va contenir la fusion des deux dictionnaire. Ce dernier est initialisé comme une copie de notre premier dict avec la méthode .copy()
d1 = {"Arthur":1, "John":1}
d1_d2 = d1.copy()
d2 = {"Jason":2, "Kevin":5, "John":33}
Enfin, on utilise la méthode .update()
pour fusionner nos deux dictionnaires
d1_d2.update(d2)
d1_d2
Output :
{'Arthur': 1, 'John': 33, 'Jason': 2, 'Kevin': 5}
Autre syntaxe possible :
{**d1 , **d2}
Output :
{'Arthur': 1, 'John': 33, 'Jason': 2, 'Kevin': 5}
NB: Si des clés sont présentes dans les deux dictionnaires, c’est la valeur contenue dans le second dictionnaire qui sera conservée
Avec une addition des valeurs pour les clés identiques
Pour cela on peut importer Counter
from collections import Counter
dc1 = Counter(d1)
dc2 = Counter(d2)
dict(dc1 + dc2)
Output :
{'Arthur': 1, 'John': 34, 'Jason': 2, 'Kevin': 5}
Compter les occurrences des éléments d’un itérable
dict(Counter(['jaune', 'vert', 'vert']))
Output :
{'jaune': 1, 'vert': 2}
Autre exemple avec une chaine de caractère :
dict(Counter('Arthur'))
Output :
{'A': 1, 'r': 2, 't': 1, 'h': 1, 'u': 1}
Stocker les intervalles (slice)
Si on veut avoir une variable qui nous permet de récupérer le dernier élément d’un itérable, il nous suffit d’utiliser la fonction slice()
l = ['Le', 'Machine', 'Learning', 'est', 'quelque', 'chose', 'de', 'nouveau', 'sous', 'le', 'soleil', ':', 'une', 'technologie', 'qui', 'se', 'construit', 'elle-même.']
LAST_ELEMENT = slice(-1, None)
l[LAST_ELEMENT]
Output :
['elle-même.']
Se débarasser de caractères avant et après d’une chaine de caractères
text_balise = "[b]Ceci est un texte en gras[/b]"
left_strip = text_balise.lstrip('[/b]')
right_strip = text_balise.rstrip('[/b]')
text_strip = text_balise.strip('[/b]')
print(left_strip)
print(right_strip)
print(text_strip)
Output :
'Ceci est un texte en gras[/b]' '[b]Ceci est un texte en gras' 'Ceci est un texte en gras'
Inverser l’ordre d’un itérable
text_strip[::-1]
Output :
'sarg ne etxet nu tse iceC'
Retourner toutes les permutations possibles
from itertools import permutations
perm = permutations([1, 2, 3])
list(perm)
Output :
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
Retourner toutes les combinaisons possibles
from itertools import combinations
comb = combinations([1, 2, 3, 4, 5], 3)
list(comb)
Output :
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
L’UNPACKING
Affectation d’éléments d’un itérable à des variables
a, b, c = [2, 5, 10]
a
Output :
2
Affectation partielle d’éléments d’un itérable à des variables
a, *b = [2, 5, 10]
print(a)
print(b)
Output :
2 [5, 10]
Interchanger les valeurs des variables
a, b = b, a
a
Output :
[5, 10]
LES COMPRÉHENSIONS
Utilisation des compréhensions de liste
Si on souhaite ajouter 3 à chaque élément de d’un itérable :
x = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]
z = [i + 3 for i in x]
z
Output :
[4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52]
Utilisation des compréhensions de dictionnaire
Si on souhaite créer un dictionnaire de mapping entre un nombre et son carré :
x = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49]
{i:i ** 2 for i in x}
Output :
{1: 1, 4: 16, 7: 49, 10: 100, 13: 169, 16: 256, 19: 361, 22: 484, 25: 625, 28: 784, 31: 961, 34: 1156, 37: 1369, 40: 1600, 43: 1849, 46: 2116, 49: 2401}
Laissez un commentaire