Afficher le contenu de deux listes

Résolu/Fermé
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019 - Modifié le 24 nov. 2018 à 21:22
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019 - 26 nov. 2018 à 16:26
Bonjour à toutes et tous,

j'ai deux listes principales que je veux afficher l'une aprés l'autre

Afficher liste1 (6 dictionnaires) de la listeA
Afficher liste1 (6 dictionnaires) de la listeB

Afficher liste2 de la listeA
Afficher liste2 de la listeB

-----------------

Afficher listeN de la listeA
Afficher listeN de la listeB

# listeA
for nb_1, elt in enumerate(sub_product):
    nb_val1 = 0
    while nb_val1 < 6:
        for val, data in elt[nb_val1].items():
            print(f"{val.upper()} : {data}")
        nb_val1 += 1
    print()

# listeB
    for nb_2, elt in enumerate(product_sub):
        nb_val = 0
        while nb_val < 6:
            for val, data in elt[nb_val].items():
                print(f"{val.upper()} : {data}")
            nb_val += 1
        print()
        if nb_1 == nb_2:
            break
        else:
            continue

mon dileme c'est qu'au deuxieme tour, arriver à la deuxieme boucle
(listeB) la boucle recommence de zéro et pas de la derniere position

est ce possible d'y remedier ?

merci


Configuration: Processeur I7, Ubuntu 18.04 64bits 32 Go de ram
3 écrans (19" vertical , 2 X 21" Horizontal)


5 réponses

Bonsoir.

Tu utilises 2 fois la variable elt.
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 24 nov. 2018 à 23:41
Bonsoir tydus,

dans le doute,
for nb_1, elt_1 in enumerate(sub_product):
        nb_val_1 = 0
        while nb_val_1 < 6:
            for val_1, data_1 in elt_1[nb_val_1].items():
                print(f"{val_1.upper()} : {data_1}")
            nb_val_1 += 1
        print()

        for nb_2, elt_2 in enumerate(product_sub):
            nb_val_2 = 0
            while nb_val_2 < 6:
                for val_2, data_2 in elt_2[nb_val_2].items():
                    print(f"{val_2.upper()} : {data_2}")
                nb_val_2 += 1
            print()
            if nb_1 == nb_2:
                break
            else:
                continue

le résultat est identique : toute les listes de la listeB sont rajouté à chaque tour de boucle:

[liste1] ==> listeA
[liste1] ==> listeB
------
[liste2] ==> listeA
[liste1] ==> listeB
[liste2] ==> listeB

-----

[listeN] ==> listeA
[liste1] ==> listeB
[liste2] ==> listeB
-------
[listeN] ==> listeB
0
Bonjour speedy_souris.

Je ne comprend pas bien ce que tu désires obtenir.

Si j'ai bien saisi, sub_product et poduct_sub sont des listes de listes de dictionnaires.
Mais les structures des dictionnaires sont-elles identiques ?

Ne pourrais-tu pas utiliser zip pour parcourir les 2 listes simultanément ?

Sinon, il faudrait en montrer plus avec un exemple des structures et l'affichage que tu désires obtenir.
0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 26 nov. 2018 à 12:33
Bonjour tydus,

Oui mes structures de listes sont identiquent

voici quelques infos:

1)le script affiche une categorie de produit alimentaire

2)choix par un utilisateur d'une categorie de produit

3)une liste de choix de produit de la categorie choisi s'affiche

4)choix par l'utilisateur d'un produit ==> listeA [
{nom_produit : 'produit'},
{description_produit : 'description'},
{grade_nutritionnel : 'grade de A à E'},
{magasin_produit : 'magasin'},
{url_fiche_produit : 'url'}
]
5)le script affiche une liste de trois produit avec meilleur grade nutritionnel

6)choix ou pas par l'utilisateur d'un des trois produit ==> listeB [
{nom_produit : 'produit'},
{description_produit : 'description'},
{grade_nutritionnel : 'grade de A à E'},
{magasin_produit : 'magasin'},
{url_fiche_produit : 'url'}
]

7) le script affiche le produit choisi et ses caracteristique (listeA),
puis le produit substitué est ses caracteristique (listeB)

Je pense que le plus simple est d'afficher une boucle sur produit 1 listeA, un boucle produit 1 listeB
sur produit 2 liste A, un boucle produit 1 listeB
...etc

0
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
Modifié le 26 nov. 2018 à 13:58
Voici mon nouveau code,

    loop = 0
    first = 0
    last = 1
    while loop < len(sub_product):
        print(f"Produit Choisi N°{loop + 1}")
        print("======= ====== ====")
        print()
        for elt_1 in sub_product[first:last]:
            nb_val_1 = 0
            while nb_val_1 < 6:
                for val_1, data_1 in elt_1[nb_val_1].items():
                    print(f"{val_1.upper()} : {data_1}")
                nb_val_1 += 1
            print()

        print(f"Produit Substitué N°{loop + 1}")
        print("======= ========= ====")
        print()
        for elt_2 in product_sub[first:last]:
            nb_val_2 = 0
            while nb_val_2 < 6:
                for val_2, data_2 in elt_2[nb_val_2].items():
                    print(f"{val_2.upper()} : {data_2}")
                    nb_val_2 += 1
            print()
            first += 1
            last += 1
        loop += 1



je ne comprend pas pourquoi cet erreur list index out of range...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
speedy_souris Messages postés 53 Date d'inscription samedi 4 janvier 2014 Statut Membre Dernière intervention 28 février 2019
26 nov. 2018 à 16:26
Grrr, encore cette erreur de comptage à partir de zéro, je finairai bien par y arrivé ....

remplacer la condition de la boucle while par < 5 (ligne 10 & 21)
et ca fonctionne à merveille !
0