Discussion:
Comparer deux listes
(trop ancien pour répondre)
gigi123
2022-09-06 10:02:33 UTC
Permalink
Bonjour,

J'aimerai pouvoir comparer deux listes. Première liste : les noms des produits
deuxième listes les noms des produits puis sa catégorie
Liste 1 :
crayon rouge,crayon vert
Liste 2 :
[['crayon bleu, Rayon A'],['crayon rouge,Rayon B'],['crayon vert,Rayon C']]

J'aimerai que mon programme compare la liste 1 avec la liste 2, dès qu'on a
liste 1 = crayon rouge et liste 2 = crayon rouge, alors on prends le rayon e
question.

J'ai essayé en faisant des boucles, mais je n'y parviens pas..

Merci à vous
yves
2022-09-06 11:35:10 UTC
Permalink
gigi123 <***@gmail.com.invalid> writes:

Bonjour,
J'aimerai pouvoir comparer deux listes. Première liste : les noms des produits,
deuxième listes les noms des produits puis sa catégorie
crayon rouge,crayon vert
Est-ce que les noms des produits sont uniques ?
[['crayon bleu, Rayon A'],['crayon rouge,Rayon B'],['crayon vert,Rayon C']]
liste 1 = crayon rouge et liste 2 = crayon rouge, alors on prends le rayon en
question.
on prends
Qu'est-ce qu'on en fait, de ce résultat ? On crée une liste 3 et on y
place ce résultat ?
J'ai essayé en faisant des boucles, mais je n'y parviens pas..
--
Yves
Stefan Ram
2022-09-07 21:20:11 UTC
Permalink
liste 1 = crayon rouge et liste 2 = crayon rouge, alors on prends le rayon en
question.
Je ne sais pas s'il est permis de poster ici des réponses à
des questions qui pourraient chercher des solutions à des
devoirs, mais je vais poster une solution qui est alambiquée
de sorte qu'elle ne fonctionne pas bien comme solution à un
devoir :

(Bien sûr, comme la question n'était pas claire, je ne sais
même pas si c'est une solution !)

import sqlite3

liste_1 =[ 'crayon rouge', 'crayon vert' ]
liste_2 = \
[ [ 'crayon bleu', 'Rayon A' ],
[ 'crayon rouge', 'Rayon B' ],
[ 'crayon vert', 'Rayon C' ]]

connection = sqlite3.connect( 'example-2022090722175972894497.db' )

try:
connection.execute( 'CREATE TABLE liste_2 ( l text, r text )' )
except sqlite3.OperationalError as error:
if str( error )== 'table liste_2 already exists': pass
else: raise error

for l, r in liste_2:
connection.execute\
( f"INSERT INTO liste_2 VALUES ( '{ l }', '{ r }' )" )

cursor = connection.cursor()
for l in liste_1:
cursor.execute( f"SELECT r FROM liste_2 WHERE l='{l}'" )
print( f"{ l }: { cursor.fetchone()[ 0 ] }" )

connection.close()
yves
2022-09-08 20:50:49 UTC
Permalink
(Bien sûr, comme la question n'était pas claire, je ne sais même pas
si c'est une solution !)
Oui, la question gagnerait a être présentée par un exemple plus complet,
par exemple:

une liste_1 d'une dizaine d'éléments,
une liste_2 d'une dizaine d'éléments

et le résultat complet attendu en sortie.
connection = sqlite3.connect( 'example-2022090722175972894497.db' )
Tiens, on doit pouvoir utiliser ça à la place:

connection = sqlite3.connect( ':memory:' )

Pour éviter une création de fichier (je n'ai jamais essayé).

@+
--
Yves
Stefan Ram
2022-09-09 10:58:17 UTC
Permalink
Post by yves
connection = sqlite3.connect( ':memory:' )
Pour éviter une création de fichier (je n'ai jamais essayé).
Oh, merci ! C'est une bonne idée !
Alain Ketterlin
2022-09-09 11:54:00 UTC
Permalink
Post by gigi123
crayon rouge,crayon vert
[['crayon bleu, Rayon A'],['crayon rouge,Rayon B'],['crayon vert,Rayon C']]
Aucune personne sensée ne représenterait ces données de cette façon.
Post by gigi123
liste 1 = crayon rouge et liste 2 = crayon rouge, alors on prends le rayon en
question.
... s[0][len (p):] for s in l2 for p in l1 if s[0].startswith (p) ...

(pour le mettre dans un ensemble au lieu de "le prendre" : r = {...})

-- Alain.

Continuer la lecture sur narkive:
Loading...