More is less

01/09/2015

Not FAQ python

Not frequently asked questions for Python ou la foire aux questions qui ne sont pas (souvent) posées.

Ce sont des solutions ou des astuces que j’ai glanées ci et là.

version : python3

Dépaquetage des arguments liste, tuple, dict
>>> def f(x, y): print(x + y)
...
>>> t = (12, 9)
>>> l = [12, 9]
>>> d = {'u':12, 'v':9}
>>> f(t)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: f() missing 1 required positional argument: 'y'
>>> f(*t)
21
>>> f(*l)
21
>>> f(*d)
uv

C’est ce qu’on utilise couramment dans les fonctions qui admettent plusieurs paramètres def f(x, *args, **kwds)

Source : Stackoverflow

Cas où seul un élément de la séquence nous intéresse :
>>> t = (12, 9)
>>> _, x = t
>>> x
9
Récupérer l’index et l’élément dans une liste
>>> l=['a', 'b', 'c']
>>> for i, x in enumerate(l): print(i, x)
...
0 a
1 b
2 c

Source : Stackoverflow

Supprimer les espaces redondants

On a x \t + 2*y \t\t - 3 et on souhaite remplacer les espaces multiples par un seul.

Exemple

>>> s='x      + 2*y      - 3'
>>> s = ' '.join(s.split())
>>> s
'x + 2*y - 3'
Syntaxe L[i:j:k] des séquences en python

Normalement L[debut:fin:pas] retourne une coupe de L commençant à debut, finissant à fin avec un pas.

Exemple

>>> L=[x + 1 for x in range(10)]
>>> L
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> L[2:7:2]
[3, 5, 7]
Un raccourci pour avoir les nombres impairs :
>>> L=[x + 1 for x in range(10)]
>>> L[::2]
[1, 3, 5, 7, 9]
Marrant : le résultat de la méthode L.reverse() peut s’obtenir ainsi :
>>> L[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Réalisé avec Qlam - LGPL