Je cherche à comparer chaque élément dans une liste List1 aux éléments dans une deuxième liste List2. Le résultat renvoyé est une liste des différences entre les deux listes. Si l'élément est trouvé, j'arrête la boucle avec un break, sinon je continue à comparer avec les autres éléments de la liste List2.
Je ne dois pas utiliser les méthodes "in" et not "in". Je dois pas non plus utiliser la récursivité.
Peux-tu nous montrer un début de code ou une quelconque tentative sur tes travaux ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.
Bonjour, j'ai programmé plusieurs fonctions pour résoudre ce problème, et voici celle que j'ai créé aujourd'hui. Elle ne renvoie pas le bon résultat. J'utilise la fonction "compare" qui est obligatoire.
def compare(a,b):
if a == b:
return 0
elif a>b:
return 1
else:
return -1
def differences(l1,l2):
# len(l2) est toujours strictement inférieur à len(l1)
l=[]
for i in range(len(l1)):
for j in range(len(l2)):
cmp = compare(l1[i], l2[j])
if cmp != 0:
l.append(l1[i])
else:
break
return l </>
def differences(l1, l2):
l = []
detect = False
for n in l1:
if n not in l2 or detect:
l.append(n)
else:
detect = True
return l
result = differences([1,2,3,4,5,6], [6,4])
assert result == [1,2,3,5,6]
print(result)
Il faudrait faire d'autres tests pour vérifier que ça fait le café, mais c'est l'idée.
Après on peut faire cela en une seule ligne mais j'ai peur de te perdre.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Je vous remercie pour votre aide. Je sais comment résoudre mon problème avec la méthode 'in' et 'not in', or il est demandé dans mon exercice de programmer cette fonction mais sans utiliser ces méthodes.
Chaque élément dans la liste 1 une doit être comparé à chaque élément dans la liste 2. Si on retrouve l'élément, on fait un break et on passe à l'élément suivant dans la liste un, et on refait les mêmes essaies, si on arrive au dernier élément de la liste 2 et qu'on le retrouve pas, alors on le rajoute dans la liste l. Les tests d'égalités doivent être fait avec la fonction 'compare'.
Pourriez-vous m'aider à comprendre comment résoudre ce problème s'il vous plaît ?
Exemple avec differences([1,2,3,4], [3,4])
1 == 3 ? => False #On ne rajoute pas d'élément dans la liste L car il reste un élément à tester dans la liste 2
1 == 4 ? => False #Il ne reste plus d'élément à tester dans la liste 2, je rajoute donc le 1 à la liste L, l=[1]. On passe à l'élément suivant dans la liste 1
2 == 3 ? => False, L = [1]
2 == 4 ? = False, L=[1,2]
3==3 ? True, break
4 == 4 ? True, break
#Tous les éléments dans la liste 1 sont testés. On renvoie L.
1 == 3 ? => False #On ne rajoute pas d'élément dans la liste L car il reste un élément à tester dans la liste 2
1 == 4 ? => False #Il ne reste plus d'élément à tester dans la liste 2, je rajoute donc le 1 à la liste L, l=[1]. On passe à l'élément suivant dans la liste 1
2 == 3 ? => False, L = [1]
2 == 4 ? = False, L=[1,2]
3==3 ? True, break
4 == 4 ? True, break
#Tous les éléments dans la liste 1 sont testés. On renvoie L.
Donc au final L est censé valoir quoi ? L = [1, 2] ? Il faut renvoyer la liste de tous les éléments qui sont dans la première liste et pas dans la seconde ?
Ok mais plus généralement, il s'agit de déterminer les éléments de la 1re liste qui ne sont pas dans la 2de ? En admettant que ce soit cela, et si tu ne veux pas utiliser l'opérateur in (et donc faire une double boucle comme tu as fait plus haut), tu peux écrire :
def differences(L, M):
D = []
for x in L:
for y in M:
if x == y:
break
if x != y:
D.append(x)
return D
D = differences([1, 2, 3, 4], [3, 4])
print(D)
[en réalité, ce serait un cas d'utilisation de l'instruction for/else, très rare d'utilisation et que tu peux ignorer pour ton problème].
[en réalité, ce serait un cas d'utilisation de l'instruction for/else, très rare d'utilisation et que tu peux ignorer pour ton problème].
Utiliser la clause else des boucles n'est pas rare du tout ! On la retrouve dans de très nombreux cas d'usage !
def compare(a, b):
if a == b:
return 0
elif a < b:
return -1
return 1
def difference(ls1, ls2):
ls = []
for a in ls1:
for b in ls2:
if compare(a, b):
break
else:
ls.append(a)
return ls
Différences entre deux listes
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères