# -*- coding:utf-8 -*- __projet__ = "Algorithmique_Corrections" __nom_fichier__ = "2_somme" __author__ = "A-J. Tinet" __date__ = "novembre 2022" """ ======================================================================================================================== Ex. 2 - SOMME DES ELEMENTS DE DEUX LISTES ======================================================================================================================== """ # Définition de fonctions def somme_liste_meme_taille(l1, l2): """ @param l1: Liste de nombres @param l2: Liste de nombres @return: Somme des éléments de l1 et l2 """ l3 = [] for i in range(len(l1)): l3.append(l1[i] + l2[i]) return l3 def somme_liste(l1, l2): """ @param l1: Liste de nombres @param l2: Liste de nombres @return: Somme des éléments de l1 et l2 """ # On fait en sorte que l1 soit la plus grande liste if len(l2) > len(l1): l1, l2 = l2, l1 # On copie la liste l1 l3 = l1[:] # On additionne les éléments de l2 for i in range(len(l2)): l3[i] += l2[i] return l3 def somme_liste_bis(l1, l2): """ @param l1: Liste de nombres @param l2: Liste de nombres @return: Somme des éléments de l1 et l2 """ n1, n2 = len(l1), len(l2) l3 = [] for i in range(max(n1,n2)): l3.append(0) if i < n1: l3[i] += l1[i] if i < n2: l3[i] += l2[i] return l3 def somme_liste_memetaille_comprehension(l1, l2): """ l1 et l2 sont de même taille @param l1: Liste de nombres @param l2: Liste de nombres @return: Somme des éléments de l1 et l2 """ return [l1[i] + l2[i] for i in range(len(l2))] def somme_liste_memetaille_zip(l1, l2): """ l1 et l2 sont de même taille @param l1: Liste de nombres @param l2: Liste de nombres @return: Somme des éléments de l1 et l2 """ return [x + y for x, y in zip(l1, l2)] # Programme principal if __name__ == '__main__': liste_0 = [1,2,3,4] liste_1 = [2,2,1,1] liste_2 = [0,5,0,5,0,5] # Liste de même taille print(somme_liste_meme_taille(liste_0, liste_1)) print(somme_liste_memetaille_zip(liste_0, liste_1)) # Listes de tailles différentes print(somme_liste(liste_1, liste_2)) #print(somme_liste_comprehension(liste_1, liste_2)) print(somme_liste(liste_2, liste_1)) #print(somme_liste_comprehension(liste_2, liste_1)) # Avec liste vide print(somme_liste_meme_taille([],[])) print(somme_liste_memetaille_zip([],[])) print(somme_liste(liste_0,[])) #print(somme_liste_comprehension(liste_0, [])) # Test rapidité import time as t t_1 = 0 t_2 = 0 for _ in range(100000): liste_1 = [2, 2, 1, 1] liste_2 = [0, 5, 0, 5, 0, 5] t1 = t.time() somme_liste(liste_1,liste_2) t2 = t.time() t_1 += t2-t1 liste_1 = [2, 2, 1, 1] liste_2 = [0, 5, 0, 5, 0, 5] t1 = t.time() somme_liste_bis(liste_1, liste_2) t2 = t.time() t_2 += t2 - t1 print(t_1, t_2) # Test rapidité import time as t t_1 = 0 t_2 = 0 for _ in range(100000): liste_0 = [1, 2, 3, 4] liste_1 = [2, 2, 1, 1] t1 = t.time() somme_liste_memetaille_comprehension(liste_1,liste_0) t2 = t.time() t_1 += t2-t1 liste_0 = [1, 2, 3, 4] liste_1 = [2, 2, 1, 1] t1 = t.time() somme_liste_memetaille_zip(liste_1, liste_0) t2 = t.time() t_2 += t2 - t1 print(t_1, t_2)