Operation tableaux Flashcards
Qu’imprime:
fn = filter(lambda x: x % 2 == 0, [1,54,92,3,7])
print(list(fn))? Pourquoi?
O: [54,92]
Car la fonction reduce prend une fonction et un itérable. La fonction vérifie une condition. Pour chaque valeur de l’itérable, si la fonction retourne vrai, alors on garde cette valeur. Dans le cas contraire, on filtre cette valeur.
valeurs -> fonctions –> Vrai ou faux —> Si vrai, prendre sinon filtrer
sum_of_tab = f.reduce(lambda x,y: x+y,[1,2,3,4,5,6])
Que fait cette ligne de code?
Cette ligne de code utilise la fonction reduce de functools pour faire la somme des valeurs de l’itérable, elle commence à gauche et additione d’abord 1+2, ensuite elle additionne le résultat de 1+2 à 3 et ainsi de suite.
Quelle est la différence majeur entre reduce, filter et map?
La différence principale réside dans ce qui est retourné.
La fonction filter et map retourne des itérateurs. Plus précisément , un objet filter et un objet map, qui doivent être passé à la fonction list pour pouvoir les voir sous forme de tableau.
Cependant, la fonction reduce elle, ne retourne pas un itérateur, mais plutôt un résultat unique. Elle n’a donc pas besoin de se faire lister.
Quelles sont les paramètres possible qu’on peut passer à la fonction reduce et que font-ils?
Il y’a un total de 3 paramètres. functools.reduce(fn,tab,valeur_initiale)
fn et tab doivent toujours être spécifiés. Le troisième paramétre, qui lui est facultatif précise un valeur initiale (où la fonction commence à reduce).
En effet, lorsqu’un troisième paramètre est spécifié
l’accumulation débute avec valeur_initiale.
tab = [1, 1, 0, 1]
print(functools.reduce(lambda x,y: x*2+y, tab))
Qu’affichera le print? À t-on besoin passer le reduce a list()? Pourquoi? Où commencera la fonction reduce?
- Le print imprimera 13.
- Pas besoin de list car reduce retourne une seule valeur
- Comme il n’y a pas de troisième paramètre précisant une valeur initiale, la fonction commencera à l’index 0 du tableau.
tab = [1, 1, 0, 1]
print(functools.reduce(lambda x,y: x+y, tab, 5))
1. Que ce passe-t-il ici? 2. Qu’imprimera le print? 3. Pourquoi?
- On a une fonction reduce qui prend une fonction anonyme en paramètre, un itérable et une valeur initiale.
- Le print imprimera 8 car la valeur initiale est 5 ce qui veut dire que le résultat commence à 5. Voici le comportement:
- 5+1 = 6 | (val initiale + tab[0])
- 6+1= 7 | (6 + tab[1])
- 7+0 = 7 | (7 + tab[2])
- 7+1 = 8 | (7 + tab[3])
tab = [1, 1, 0, 1]
print(functools.reduce(lambda x,y: x+str(y), tab, ‘’))
Pourquoi n’a t on pas besoin de convertir x en string mais y oui?
On n’a pas besoin de convertir x en string car on précise une valeur initiale qui est la chaine de caractère vide. De ce fait, x commence deja en étant un string. Cependant, on doit convertir y en chaine de caractere car lors de la premiere iteration, y va etre l’élément tab[0] = 1, c’est un integer, il doit donc être converti en string afin de permettre la concaténation.
Comment utilise-t-on insert?
La syntaxe de la procédure est insert(idx, element).
Qu’est ce que sys.argv?
sys.argv est une liste en Python, accessible dans le module sys, qui contient les arguments de la ligne de commande passés à un script Python.
Quel est l’élément sys.agrv[0]?
le premier élément de sys.argv est toujours le nom du script python.
Les éléments suivants dans la liste (sys.argv[1], sys.argv[2], etc.) sont les arguments supplémentaires passés au script.
Que représente len(sys.argv)-1?
Ca représente la longueur du tableau mais en prenant en compte seulement les arguments. Ca ne prends pas en compte le nom du fichier python.
Que fait:
import sys
import functools
get_positive = list(filter(lambda x: int(x)>0, sys.argv[1:]))
get_sum = functools.reduce(lambda x,y: int(x)+int(y), get_positive)
print(‘La somme est de’, get_sum) ?
- get_positive utilise filter afin d’obtenir uniquement les nombres positifs. On utilise list pour transformer le filter object en tableau
- On utilise functools.reduce pour obtenir la somme des nombres positif obtenus avec get_positive. Puisque reduce retoune une seule valeur, il n’a pas besoin d’être passé dans list().
Que fait ce code?
import functools
tab = [1,2,3,45,-51,4]
maxi = functools.reduce(lambda x,y: x if x > y else y,tab)
- Ce code retourne la plus grande valeur dans une liste de nombres.
- La fonction lambda retourne le nombre le plus grand.
- En partant de la gauche, la fonction reduce commence par 1 et 2, ensuite le resultat de cette comparaison avec 3 et ainsi de suite.
- Remarquons que cette reduce n’a pas besoin d’être passé à list car il retourne une seule et unique valeur.
Que fait:
tab = [1,2,3,45,-51,4]
max = 0
for i in range(len(tab)):
if tab[i] > max:
max = tab[i]
print(max) ?
- on utilise max comme référence de départ
- Pour chaque nombre de la liste, si ce nombre est plus grand que max, max deviendra cette valeur
- C’est un algorithme pour avoir la plus grande valeur dans une liste
t = [11,22,33,44,55]
print(t.reverse())
print(t.remove(11))
print(t.pop(0))
print(t.pop())
print(t.clear())
print(t.append(66))
print(t.extend([77,88]))
print(t.insert(1, 99))
print(t.copy())
Lesquels des appels à print dans le programme suivant imprime une valeur utile (différente de None) et quelle valeur est imprimée?
t = [11,22,33,44,55]
print(t.reverse()) # None
print(t.remove(11)) # None
print(t.pop(0)) # 55
print(t.pop()) # 22
print(t.clear()) # None
print(t.append(66)) # None
print(t.extend([77,88])) # None
print(t.insert(1, 99)) # None
print(t.copy()) # [66, 99, 77, 88]