Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 07-12-2018 10:06:39

boucle sur des listes
Invité

boucle en python

Bonjour, j'aimerais créer un programme qui me permettrai de comparer plusieurs liste à une liste mère.
Ensuite techniquement j'aimerais que mo programme sorte : que tels élements de a sont dans liste_mere etc
ca fonctionne quand il n'y a pas de boucle mais la boucle n'est pas bouclé heheh
J'ai deja fait ca, mais ca ne fonctionne pas, auriez vous une idée ?
"""liste fille

"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]

"""liste mère qui sera l'équivalent du fichier composé"""

liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]

"""début du programme """

while (L==0):
    L=set()
    marge=0
    for i in liste_mere:
        for j in (a):
            if abs (i-j)==marge:
                L.add(i)
print (L)

#2 07-12-2018 12:56:56

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : boucle en python

Salut,

Je ne comprends pas bien ce que tu cherches à faire...
add() ne fonctionne qu'avec set() : il n'ajoute un élément que s'il n'est déjà pas présent.
Si tu passes en revue toutes les listes filles, à la sortie, L ne sera pas identique à ta liste mère puisque celle-ci contient des doublons et L, non Je ne vois pas à quoi sert marge...
Tu faisais appel à la liste L avec

while L==0:
2 erreurs :
Python ne pouvait que râler  : L n'était défini qu'après, la liste L ne peut être égale à 0 = Liste $\neq$ nombre...
Un peu du même ordre que si tu écrivais while tortue ==oiseau:

Pourquoi :  if abs (i-j)==0: ? if j==i: ne te conviendrait pas ?

Code fonctionnel (et amélioré)

"""listes filles

"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]

"""liste mère qui sera l'équivalent du fichier composé"""

liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]

"""début du programme """

Dico={0:a,1:b,2:c,3:d,4:e,5:f,6:g}
L=set()
for numliste in range(7):
    #marge=0
    A=Dico[numliste]
    for i in liste_mere:
        for j in A:
            if abs (i-j)==0:
                L.add(i)
   
print (L)

J'ai créé un dictionnaire contenant les noms des listes que j'ai indexées
Dico[numliste] appelle la liste n° numliste.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 07-12-2018 13:43:42

reponse
Invité

Re : boucle en python

dans un premier temps merci bcp pour le temps que vous avez pris, mais c'est pas exactement ca que je souhaite faire, enfaite je souhaite un faire un programme d'identification en quelque sorte.
Imaginons 5 éléments de la liste a sont dans la liste mere, alors je veux que le programme me dise que a est dans la liste mere
et ainsi de suite, je sais pas si je suis claire :p
Et marge sert à faire une marge d'erreur, car les informations que je vais traiter par la suite aurons une marge d'erreur car proviendront de mesure réel et non théorique

#4 07-12-2018 15:36:46

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : boucle en python

Re,

Imaginons 5 éléments de la liste a sont dans la liste mere, alors je veux que le programme me dise que a est dans la liste mere

Alors à quoi sert ton set de L ?
A quoi sert de stocker ces éléments dans L ?
A quoi sert d'afficher L ?
A quoi servait ta boucle while L==0 qui bouclait tant qu'une chaise = un oiseau (par ex) ?

Tu as maintenant un script qui fonctionne, modifie-le à ta guise pour répondre à tes besoins...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 07-12-2018 20:09:29

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : boucle en python

Re,

J'avais un peu de temps pour m'amuser :


"""listes filles

"""
a=[7, 7, 15, 0, 14, 20, 7, 10, 19, 15, 3, 5, 7, 20, 4, 14, 26, 19, 17, 15]
b=[6, 9, 21, 12, 17, 25, 27, 2, 25, 17, 21, 14, 17, 26, 15, 4, 24, 25, 14, 8]
c=[13, 16, 20, 24, 18, 26, 11, 1, 25, 1, 6, 26, 15, 15, 17, 15, 7, 27, 5, 24]
d=[28, 10, 19, 1, 27, 2, 27, 2, 17, 23, 26, 28, 28, 22, 27, 18, 8, 24, 25, 24]
e=[11, 26, 13, 5, 27, 9, 24, 0, 11, 1, 24, 17, 6, 11, 23, 9, 21, 8, 21, 3]
f=[11, 28, 27, 19, 15, 21, 10, 11, 5, 12, 10, 6, 13, 9, 26, 10, 4, 5, 6, 26]
g=[23, 20, 24, 16, 3, 24, 6, 23, 18, 18, 2, 25, 15, 13, 20, 14, 24, 0, 26, 20]

"""liste mère qui sera l'équivalent du fichier composé"""

liste_mere = [4, 15, 17, 3, 8, 3, 28, 1, 1, 28, 4, 2, 2, 8, 28, 6, 11, 25, 24, 9, 15, 9, 3, 5, 29, 8, 8, 8, 2, 22, 24, 4, 20, 5, 12, 29, 25, 4, 22, 2]

"""début du programme """

Dico={0:a,1:b,2:c,3:d,4:e,5:f,6:g}
Phrase='Aucune correspondance trouvée'
Temp=[]
L=set()
print("     ** Sont présents dans la liste mère : **\n")
for numliste in range(7):
    marge=0
    ListeFille=set(Dico[numliste])
    ListeMere=set(liste_mere)
    print("Dans la liste fille "+chr(97+numliste))
    for i in ListeMere:
        for j in ListeFille:
            if abs (i-j)==marge:
                print(j,end=" ")
                L.add(j)
                Temp.append(j)
    if Temp==[]:
        print(Phrase,"\n")
    Temp=[]          
    print("\n")
   
print ("L =",L)

Sortie :

** Sont présents dans la liste mère : **

Dans la liste fille a
3 4 5 15 17 20

Dans la liste fille b
2 4 6 8 9 12 15 17 24 25

Dans la liste fille c
1 5 6 11 15 17 20 24 25

Dans la liste fille d
1 2 8 17 22 24 25 28

Dans la liste fille e
1 3 5 6 8 9 11 17 24

Dans la liste fille f
4 5 6 9 11 12 15 28

Dans la liste fille g
2 3 6 15 20 24 25

L = {1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 15, 17, 20, 22, 24, 25, 28}

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 10-12-2018 08:30:47

enguerrand
Membre
Inscription : 10-12-2018
Messages : 1

Re : boucle en python

C'est effectivement ca qu'il me fallait,
merci infiniment
et bien enfaite le L avec ta méthode de traitement du problème sert tout simplement à rien :p
je me penche un peu sur le code, et tout est assez claire, merci encore
vraiment merci !

Hors ligne

#7 10-12-2018 13:48:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : boucle en python

Rez,

Les set() sont utilisés pour supprimer les doublons (et - accessoirement -, ranger les éléments par ordre croissant) : ça évite la gestion - pas simple -des doublons...

Plutôt qu'utiliser ta variable marge, je t'invite à te pencher sur la fonction isclose() :

Python docs a écrit :

math.isclose (a, b, *, rel_tol = 1e-09, abs_tol = 0.0)

     Renvoie True si les valeurs a et b sont proches et False sinon.

     Le fait que deux valeurs soient considérées proches ou non est déterminé en fonction de tolérances absolues et relatives données.

     rel_tol est la tolérance relative - c'est la différence maximale autorisée entre a et b, par rapport à la plus grande valeur absolue de a ou b. Par exemple, pour définir une tolérance de 5%, transmettez rel_tol = 0.05. La tolérance par défaut est 1e-09, ce qui garantit que les deux valeurs sont identiques à environ 9 chiffres décimaux. rel_tol doit être supérieur à zéro.

     abs_tol est la tolérance absolue minimale - utile pour les comparaisons proches de zéro. abs_tol doit être au moins égal à zéro.

     Si aucune erreur ne se produit, le résultat sera: abs (a-b) <= max (rel_tol * max (abs (a), abs (b)), abs_

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

Pied de page des forums