Voici 11 trucs et astuces qui vous aideront à écrire un meilleur code Python et à devenir un meilleur programmeur :
range(len(x))
En Python, nous utilisons généralement une boucle for
pour parcourir un objet itérable. Une boucle for
en Python utilise une itération basée sur la collection, c'est-à-dire que Python affecte l'élément suivant d'un itérable à la variable de boucle à chaque itération. Le cas d'utilisation habituel d'une boucle for
est le suivant :
values = ["a", "b", "c"] for value in values: print(value) # a # b # c
Maintenant, si en plus de la valeur, vous souhaitez également imprimer l'index, vous pouvez le faire comme ceci :
index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c
ou une autre façon courante de le faire est d'utiliser range(len(x))
:
for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c
Cependant, il existe un moyen plus simple et plus pythonique d'itérer sur des objets itérables en utilisant enumerate()
. Il est utilisé dans une boucle for
presque de la même manière que vous utilisez la manière habituelle, mais au lieu de mettre l'objet itérable directement après in
la boucle for
, ou de l'utiliser comme range(len(values))
, vous le mettez à l'intérieur les parenthèses de enumerate()
comme indiqué ci-dessous :
for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c
Nous pouvons également définir un argument de start
pour enumerate()
comme indiqué ci-dessous :
for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c
La fonction enumerate()
renvoie deux variables :
Tout comme les variables de boucle dans une boucle for
, les variables de boucle peuvent être nommées n'importe quoi, par exemple, nous pouvons appeler index
et value
et elles fonctionneront toujours. enumerate()
est plus efficace qu'une boucle for
car elle vous évite d'avoir à vous rappeler d'accéder à la valeur à l'intérieur de la boucle et de l'utiliser correctement, puis n'oubliez pas d'avancer la valeur de la variable de boucle, tout est géré automatiquement par Python .
La compréhension de liste est un moyen plus simple et élégant de définir et de créer des listes basées sur les listes existantes. Il s'agit simplement d'une seule ligne de code composée de crochets contenant l'expression qui est exécutée de manière répétée à chaque itération. Par conséquent, ils sont plus efficaces en termes de temps et d'espace que les boucles et transforment des instructions itératives en une seule ligne de code.
La syntaxe habituelle d'une compréhension de liste ressemble à ceci :
newList = [ expression(element) for element in oldList if condition ]
Voici un exemple de compréhension de liste dans le code :
# Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']
sorted()
La fonction Python sorted()
trie les éléments d'un objet itérable dans un ordre spécifique (croissant ou décroissant) et les renvoie sous forme de liste triée. Il peut être utilisé pour trier une séquence (chaîne, tuple, liste) ou une collection (ensemble, dictionnaire, ensemble gelé) ou tout autre itérateur.
La syntaxe de la fonction sorted()
est la suivante :
sorted(iterable, key=None, reverse=False)
La fonction sorted()
prend au maximum trois paramètres :
Un ensemble Python stocke une seule copie des valeurs en double. Par conséquent, il peut être utilisé pour rechercher des valeurs uniques dans une liste. Par exemple:
list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item)
Ainsi, la sortie du programme ci-dessus ressemblerait à ceci :
The unique elements of the input list using set(): 25 75 100 20 12
La fonction de base du générateur est d'évaluer les éléments à la demande. C'est très similaire à la syntaxe pour la compréhension de liste, où au lieu de crochets, nous utilisons des parenthèses.
Prenons un exemple où nous voulons imprimer le carré de tous les nombres pairs d'une liste :
myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele)
La sortie du code ci-dessus ressemblerait à ceci :
The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100
Cela dit, leur syntaxe est assez similaire à la compréhension de liste, vous devez vous demander en quoi elle est différente de la compréhension de liste ou d'ensemble. Contrairement à la compréhension de liste ou d'ensemble, la compréhension de générateur n'initialise aucun objet. Par conséquent, vous pouvez utiliser la compréhension du générateur au lieu de la compréhension des listes ou des ensembles pour réduire les besoins en mémoire du programme.
.get()
et .setdefault()
La méthode .setdefault()
permet de définir dict[key]=default
si la clé n'est pas déjà dans dict.
La syntaxe de .setdefault()
ressemble à ceci :
dict.setdefault(key, default=None)
Voici un exemple d'extrait de code pour comprendre comment utiliser .setdefault()
:
a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary)
La sortie du code ci-dessus ressemblerait à :
{'a': 1, 'b': 2, 'd': 4, 'c': 3}
La même chose peut également être obtenue en utilisant la méthode .get()
en passant une valeur par défaut pour la clé, comme vous pouvez le voir ci-dessous :
a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary)
La sortie du code ci-dessus ressemblerait à ceci :
3 {'a': 1, 'b': 2, 'd': 4}
collections.Counter
Le module Collections prend en charge les types de données de conteneur hautes performances (en plus des types intégrés list, dict et tuple) et contient une variété de structures de données utiles pour stocker des informations en mémoire.
Un compteur est un conteneur qui enregistre le nombre de fois où des valeurs égales sont ajoutées.
Il peut être utilisé pour implémenter les mêmes algorithmes que d'autres langages utilisent des structures de données de sac ou multi-ensembles pour implémenter.
Les collections d'importation rendent les éléments des collections disponibles en tant que :
import collections
Puisque nous n'utiliserons que le compteur, nous pouvons simplement faire ceci :
from collections import Counter
Il peut être utilisé comme suit :
import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter])
La sortie du code ci-dessus ressemblerait à ceci :
a : 3 b : 2 c : 1 d : 1 e : 0
Les chaînes f, également appelées "littéraux de chaîne formatés", sont une nouvelle façon plus pythonique de formater les chaînes, prise en charge par Python 3.6+. Ils constituent un moyen plus rapide, plus lisible, plus concis et moins sujet aux erreurs de formatage de chaîne en Python.
Comme le nom "f-string" l'indique, ce sont des littéraux de chaîne qui ont un f au début et des accolades contenant des expressions qui seront remplacées par leurs valeurs au moment de l'exécution, puis formatées à l'aide du protocole __format__
.
Les f-strings peuvent être utilisés comme suit :
name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.'
.join()
En Python, nous pouvons utiliser la méthode .join()
pour concaténer une liste de chaînes en une seule chaîne. La syntaxe habituelle de cette méthode ressemble à ceci :
'String to insert'.join([List of strings])
Il peut être utilisé de plusieurs façons - si vous utilisez la chaîne vide ““
, [Liste de chaînes] est simplement concaténée, et si vous utilisez une virgule, une chaîne délimitée par des virgules est créée. Lorsque le caractère de saut de ligne \n
est utilisé, un saut de ligne est ajouté après chaque chaîne. Voir l'exemple ci-dessous :
l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc
{**d1, **d2}
(Python 3.5+) Le moyen le plus simple de fusionner des dictionnaires consiste à utiliser l'opérateur de décompression ( **
). La syntaxe de cette méthode ressemble à ceci :
{**dict1, **dict2, **dict3}
Voici un exemple pour mieux comprendre cette méthode :
d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
if x in list
Supposons que nous ayons une liste avec les couleurs primaires rouge, vert et bleu. Et quelque part dans notre code, nous avons une nouvelle variable avec une couleur, donc c = rouge. Ensuite, nous verrons s'il s'agit de l'une de nos couleurs primaires. Bien sûr, nous pourrions vérifier cela par rapport à chaque élément de notre liste comme suit :
colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color")
Cependant, cela peut prendre beaucoup de temps et nous pouvons facilement faire des erreurs, comme si nous avions une faute de frappe ici pour le rouge. Il est plus simple et de loin préférable d'utiliser simplement l'expression if x in list :
colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color")
Python est un langage de programmation largement utilisé et en utilisant les trucs et astuces ci-dessus, vous pouvez devenir un meilleur programmeur Python.
J'espère que cet article a été utile. Continue de lire!