Bonjour à Tous,
Question sur le fonctionnement de liste de listes en Python. Voici le code suivant:
ini_list = [[1, 2, 5, 10, 7],
[4, 3, 4, 3, 21],
[45, 65, 8, 8, 9, 9]]
element = 1
l = [[]]
est_dans_liste = (element in sublist for sublist in l)
if est_dans_liste:
print("ok")
Dans cet exemple, je cherche à savoir si la valeur numérique "1" est présente dans la liste de listes l (liste vide en l'occurence ici)
Le résultat de ce code est "e;ok"e;. Ce qui est bien évidemment faux. Il y a donc quelque chose que je n'ai pas saisi dans le fonctionnement des listes. Est ce que l'un d'entre vous peut me guider ?
Merci beaucoup
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Alain Ketterlin
Olivier92410 writes:
Bonjour Í Tous, Question sur le fonctionnement de liste de listes en Python. Voici le code suivant: ini_list = [[1, 2, 5, 10, 7], [4, 3, 4, 3, 21], [45, 65, 8, 8, 9, 9]] element = 1 l = [[]] est_dans_liste = (element in sublist for sublist in l)
Cette instruction crée un générateur, ce que tu peux voir avec "type(est_dans_liste)" par exemple. Un générateur est un objet qui... génère des objets Í condition qu'on itère dessus, par exemple avec for b in est_dans_liste: print (b) ou simplement print (list(est_dans_liste))
if est_dans_liste: print("ok")
LÍ tu convertis ton objet-générateur en booléen, et tous les générateurs se convertissent en True (même ceux qui ne produiront aucun objet). C'est normal : la conversion n'est pas supposée modifier l'objet, et parcourir un générateur le modifie définitivement.
Dans cet exemple, je cherche Í savoir si la valeur numérique "1" est présente dans la liste de listes l (liste vide en l'occurence ici)
Ton générateur te permet d'avoir la réponse pour chaque sous-liste. Dans ton exemple, il va produire un booléen False. Avec la liste non-vide donnée plus haut, ton générateur va produire trois booléens, successivement True False False.
Le résultat de ce code est "e;ok"e;.
Je ne sais pas d'o͹ viennent tes "e;", ce serait bien que tu nous les épargnes.
Ce qui est bien évidemment faux. Il y a donc quelque chose que je n'ai pas saisi dans le fonctionnement des listes. Est ce que l'un d'entre vous peut me guider ? Merci beaucoup
Si tu veux utiliser un générateur, tu peux l'utiliser comme une liste (sauf qu'il est cramé après le parcours). Il te manque donc un niveau de parcours : tu as les réponses pour chaque sous-liste, tu cherches dans la liste de ces réponses. Tu peux faire True in (element in sublist for sublist in l) ou any (element in sublist for sublist in l) -- Alain.
Bonjour Í Tous,
Question sur le fonctionnement de liste de listes en Python. Voici le code
suivant:
ini_list = [[1, 2, 5, 10, 7],
[4, 3, 4, 3, 21],
[45, 65, 8, 8, 9, 9]]
element = 1
l = [[]]
est_dans_liste = (element in sublist for sublist in l)
Cette instruction crée un générateur, ce que tu peux voir avec
"type(est_dans_liste)" par exemple.
Un générateur est un objet qui... génère des objets Í condition qu'on
itère dessus, par exemple avec
for b in est_dans_liste:
print (b)
ou simplement
print (list(est_dans_liste))
if est_dans_liste:
print("ok")
LÍ tu convertis ton objet-générateur en booléen, et tous les générateurs
se convertissent en True (même ceux qui ne produiront aucun objet).
C'est normal : la conversion n'est pas supposée modifier l'objet, et
parcourir un générateur le modifie définitivement.
Dans cet exemple, je cherche Í savoir si la valeur numérique "1" est présente
dans la liste de listes l (liste vide en l'occurence ici)
Ton générateur te permet d'avoir la réponse pour chaque sous-liste. Dans
ton exemple, il va produire un booléen False. Avec la liste non-vide
donnée plus haut, ton générateur va produire trois booléens,
successivement True False False.
Le résultat de ce code est "e;ok"e;.
Je ne sais pas d'o͹ viennent tes "e;", ce serait bien que tu nous les
épargnes.
Ce qui est bien évidemment faux. Il y a donc quelque chose que je n'ai
pas saisi dans le fonctionnement des listes. Est ce que l'un d'entre
vous peut me guider ? Merci beaucoup
Si tu veux utiliser un générateur, tu peux l'utiliser comme une liste
(sauf qu'il est cramé après le parcours). Il te manque donc un niveau de
parcours : tu as les réponses pour chaque sous-liste, tu cherches dans
la liste de ces réponses. Tu peux faire
Bonjour Í Tous, Question sur le fonctionnement de liste de listes en Python. Voici le code suivant: ini_list = [[1, 2, 5, 10, 7], [4, 3, 4, 3, 21], [45, 65, 8, 8, 9, 9]] element = 1 l = [[]] est_dans_liste = (element in sublist for sublist in l)
Cette instruction crée un générateur, ce que tu peux voir avec "type(est_dans_liste)" par exemple. Un générateur est un objet qui... génère des objets Í condition qu'on itère dessus, par exemple avec for b in est_dans_liste: print (b) ou simplement print (list(est_dans_liste))
if est_dans_liste: print("ok")
LÍ tu convertis ton objet-générateur en booléen, et tous les générateurs se convertissent en True (même ceux qui ne produiront aucun objet). C'est normal : la conversion n'est pas supposée modifier l'objet, et parcourir un générateur le modifie définitivement.
Dans cet exemple, je cherche Í savoir si la valeur numérique "1" est présente dans la liste de listes l (liste vide en l'occurence ici)
Ton générateur te permet d'avoir la réponse pour chaque sous-liste. Dans ton exemple, il va produire un booléen False. Avec la liste non-vide donnée plus haut, ton générateur va produire trois booléens, successivement True False False.
Le résultat de ce code est "e;ok"e;.
Je ne sais pas d'o͹ viennent tes "e;", ce serait bien que tu nous les épargnes.
Ce qui est bien évidemment faux. Il y a donc quelque chose que je n'ai pas saisi dans le fonctionnement des listes. Est ce que l'un d'entre vous peut me guider ? Merci beaucoup
Si tu veux utiliser un générateur, tu peux l'utiliser comme une liste (sauf qu'il est cramé après le parcours). Il te manque donc un niveau de parcours : tu as les réponses pour chaque sous-liste, tu cherches dans la liste de ces réponses. Tu peux faire True in (element in sublist for sublist in l) ou any (element in sublist for sublist in l) -- Alain.