python et les types de bases¶
liste¶
Les listes sont des objets qui possèdent quelques méthodes très pratiques pour les manipuler:
- l.append(x) : ajoute l’occurence x en fin de liste.
- l.extend(x) : ajoute chaque élement de la séquence x en fin de liste.
- l.count(x) : renvoie le nombre d’occurences x de la liste.
- l.index(x[, i[, j]]) : retourne le plus petit k tel que s[k] = x et i<=k<=j. retourne une erreur si l’élément n’est pas présent dans la liste. Si i et j sont omis, l’ensemble de la liste est considéré.
- l.insert(i, x) : insère l’occurence x à la position i.
- l.pop([i]) : retourne l’élément de la position i et le supprime de la liste. Si i est omis, le dernier élément de la liste est retourné et supprimé
- l.remove(x) : supprime la première occurence de x de la liste. retourne une erreur si cette valeur n’est pas présente.
- l.reverse(): renverse la liste sur place.
- l.sort([cmp[, key[, reverse]]]) : trie les éléments de la liste sur place. Vous pouvez définir votre propre fonction de comparaison en définissant le paramètre cmp. Le booléan reverse permet de retourner ou non la liste triée dans l’ordre croissant ou décroissant. Si ces paramètres sont omis, la liste est triée dans l’ordre alphanumérique croissant.
>>> l =['David', 'Pythonista', '+1-514-555-1234']
>>> name, title, phone = l
>>> name
'David'
>>> title
'Pythonista'
>>> phone
'+1-514-555-1234'
pour inverser une liste
x = x[::-1]
on peut à partir d’une liste créer un itérateur
iterator = range(10).__iter__()
while True:
try:
x = iterator.__next__()
except StopIteration:
break
print(x)
il est possible à partir d’un tableau (une liste de listes) de l’inversé
>>>a = [[11,12,13],
[21,22,23],
[31,32,33]]
>>>b=zip(*a)
>>>print(b)
[[11,21,31],
[12,22,32],
[12,23,33]]
il est aussi possible d’énumérer les élements du liste
>>>for i,c in enumerate(range(10)):
print(i,c)
(0, 0)
(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 5)
(6, 6)
(7, 7)
(8, 8)
(9, 9)
my_container = ['Larry', 'Moe', 'Curly']
for index, element in enumerate(my_container):
print ('{} {}'.format(index, element))
suppression d’une occurence¶
l = [1,5,4,1,23,1,2,1]
try:
while True: l.remove(1)
except: pass
print l ## [5,4,23,2]
filtrer une liste¶
obj = {'tutu':'filtrer','ae':'non filtrer','tyty':'filtrer'}
a = [item for item in obj.keys() if item.startswith('t') ]
trier et filtrer une liste d’objet¶
un exemple simple: nous avons un objet port qui est défini par:
- une ip
- un port
on gère une liste de ces objets et on souhaite:
- trier la liste par ip puis port
- filtrer que les ports déclarés “open”
class Port:
def __init__(self, ip, port=None):
self.ip = ip
self.port = port
self.value = -2
def __lt__(self, other):
if self.ip == other.ip:
return self.port < other.port
return self.ip < other.ip
def __le__(self, other):
if self.ip == other.ip:
return self.port <= other.port
return self.ip <= other.ip
def __eq__(self, other):
if self.ip == other.ip:
return self.port == other.port
return self.ip == other.ip
def __ne__(self, other):
if self.ip == other.ip:
return self.port != other.port
return self.ip != other.ip
def __gt__(self, other):
if self.ip == other.ip:
return self.port > other.port
return self.ip > other.ip
def __ge__(self, other):
if self.ip == other.ip:
return self.port >= other.port
return self.ip >= other.ip
def onlyOpen(p):
if p.value == 1:
return True
return False
a =[]
a.append(Port('127.0.0.1','8080'))
a.append(Port('127.0.0.1','78'))
a.append(Port('88.26.76.33','8080'))
p = Port('192.168.1.1','8080')
p.value = 1 #port ouvert
a.append(p)
for i in a:
print(i.ip, i.port)
a.sort()
for i in a:
print(i.ip, i.port)
b = filter(onlyOpen, a)
for i in b:
print(i.ip, i.port)
faire un if en une ligne¶
on peut faire un if comme cela
a = 2
if a > 1:
b = False
else:
b = True
ou
a = 2
b = a >= 1 and True or False
il est aussi possible de gérer facilement les valeurs null
a = None
if a:
b = 'tutu'
else:
b = a
peut être remplacé par
a = None
b = (a or 'tutu')
obtenir la moyenne d’une liste¶
Objectif: obtenir la moyenne des écarts entre les valeurs d’une liste
On traite içi la problématique des laps time
nums = [1, 10, 17, 22, 29, 37, 49, 55, 58]
print([x-y for x,y in zip(nums[1:],nums)])
>>> [9, 7, 5, 7, 8, 12, 6, 3]
delta=[x-y for x,y in zip(nums[1:],nums)]
float(sum(delta))/len(delta)
>>> 7.0
dictionnaire¶
- dic={}: initialise un dictionnaire
- dic[cle]: Retourne la valeur associée à la clé cle
- dic.get(cle, val): Retourne la valeur associée à la clé cle, ou val si la clé n’existe pas
- dic[cle] = val: Assigne la valeur val à cle (si la clé n’existe pas, elle est créée)
- del dic[cle]: Supprime la clé cle
- dic.clear(): Vide le dictionnaire
- dic1.update(dic2): Assigne à dic1 les éléments de dic2
- dic.keys() donne la liste des clés
- dic.has_keys(k) indique si liste possède cette clé
- dic.values() donne la liste des valeurs
- dic.items() donne la liste des couples (clé, valeur)
il est possible de créer un dictionnaire à partir d’une liste
a = {i : a for i,a in enumerate(range(10)) }
création d’un dictionnaire à partir de deux listes
1 >>a=['aa','bb','cc']
2 >>b=[1,2,3]
3 >>dico = {k: v for k, v in zip(b,a)}
4 >>print dico
{1: 'aa', 2: 'bb', 3: 'cc'}
fonction¶
def somme(*args):
return sum(args)
def calcul(**keys):
score = keys['value']
if 'somme' in keys: score += keys['somme']
if 'produit' in keys: score *= keys['produit']
return score
print calcul(value = 5, somme = 2, produit = 7)
print calcul(value = 4, produit = 9)