Liste verification

Résolu/Fermé
maxixime - 4 janv. 2015 à 16:26
 Utilisateur anonyme - 7 janv. 2015 à 14:06
Bonjour,
je cherche un moyen pour vérifier que les occurrence d'une liste appartienne bien a une autre liste
ex:
lst1 = [1,2,3,4,5,6,7,8,9]
lst2 = [1,5,8]
pour que si les élements de lst2 sont dans lst1 il me return True



12 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
5 janv. 2015 à 21:28
Bonjour,

Je remets ce que j'avais mis plus haut car, ça me paraît clair :-)
Dès qu'un élément n'est pas dans la liste, il faut renvoyer False. S'ils sont tous dans la liste, donc à la fin de la boucle for, tu renvoies True.
1
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
4 janv. 2015 à 17:03
Bonsoir,

Une boucle parcoure les données de list2.
Pour chaque valeur (V) de list2, une seconde boucle parcoure List1 pour comparer à V.
A la première absence, tu sors des deux boucles et retourne False.
Si tu trouve tout, tu retournes True
0
oui c'est ce que j'ai pensé faire mais impossible d'écrire quelque chose qui fonctionne, mon programme vérifie uniquement la première donnée de lst2
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
4 janv. 2015 à 19:49
Pour que quelqu'un puisse voir ce qui ne va pas dans ton code, il faut le poster.

Pense à utiliser la coloration syntaxique.
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 janv. 2015 à 20:05
Pas besoin d'une double boucle for.
1/ Tu parcours la liste2
2/ Tu renvoies False dès qu'un élément n'est pas dans liste1 (opérateur in).
3/ Sinon, tu renvoie True
0
ça ferais un truc du genre ?
for i in lst1 :
if i in lst2 :
return True
else :
return False
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
4 janv. 2015 à 22:27
Ca brûle, mais c'est pas tout à fait juste.
Dès qu'un élément n'est pas dans la liste, c'est qu'il faut renvoyer False. S'ils sont tous dans la liste, donc à la fin de la boucle for, tu renvoies True.
C'est plutôt for i in lst2 (et non lst1)


Note : n'oublie pas de tenir compte de la remarque de whismeril sur la coloration syntaxique.
Exemple :
<code python>ici tu mets ton code</code>
0
def apartenance (lst1 , lst2) :
	for c in lst2 :
		if c not in lst1 :
			return False
		else : 
			return True	

		

lst = [1,2,3,4,5,6,7]
lsttest = [1,4,9] 

test = apartenance (lsttest,lst)
print (test)


je viens d'écrire ça mais le problème est qu'il me renvoi True, j'ai l'impression qu'il test uniquement le première éléments
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
5 janv. 2015 à 11:26
Bonjour, pense à utiliser le bouton répondre. Les commentaires servent plus à digresser sur une réponse
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
5 janv. 2015 à 11:29
Bonjour,

Je ne connaissait pas l'instruction in (je ne fais pas de Python...).
Mais dans ma première réponse, je t'ai dis de renvoyer Fasle dès qu'il manque une valeur et True quand toute la recherche est faite.

Ce n'est pas ce que fait ton code.
0
bonjours,
je vois pas très bien ce que tu veux dire, la il est censé renvoyer False lorsque que un élement ne se trouve pas dans la seconde liste
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 929
5 janv. 2015 à 21:15
Oui, mais pas true dès qu'il en trouve un.
0
comme ça, j'ai vraiment du mal avec cette fonction dsl :s
def apartenance (lst1 , lst2) :
	for c in lst2 :
		if c not in lst1 :
			return False
	return True

		

lst = [1,2,3,4,5,6,7]
lsttest = [1,4,6] 

test = apartenance (lsttest,lst)
print (test)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 5/01/2015 à 22:03
Bah c'est bien ça :-). Parfait.
Ca ne te convient pas ?
0
maxixime > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
5 janv. 2015 à 22:14
bah je l'avais fait comme ça au départ, mais quand je le test il me répond False .. :/
0
maxixime > maxixime
5 janv. 2015 à 22:16
je viens de trouver l'erreur, merci beaucoup, il faut juste inversée les deux lst1 et lst2
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
5 janv. 2015 à 22:28
Ben, faut faire attention.
Dans ton post initial, tu mets :
lst1 = [1,2,3,4,5,6,7,8,9]
lst2 = [1,5,8]
pour que si les élements de lst2 sont dans lst1 il me return True

Dans ce cas, il faut bien faire : for i in lst2

Maintenant, si tu souhaites vérifier les éléments de lst1. Là oui, il faut bien mettre : for i in lst1.

Cdlt,
0
cependant il me reste un problème, je suis en train de programmer le jeu des chiffres et des lettres mais dans cette vérification il regarde juste si l'élément existe dedans alors que je voudrais que l'utilisateur ne puisse se servir que d'une seul fois chaque élément de lst1 (choix lettres) dans lst2(choix du joueur)
par exemple:
lst1=[1,2,3,4,5,6]
lst2=[1,2,4,4]
j'aimerai qu'il me donne False
0
Pour vérifier l'appartenance d'un groupe d'éléments dans une liste on peut utiliser all. C'est très efficace et court.

def appartenance(lst1, lst2):
    return all(i in lst1 for i in lst2)


"alors que je voudrais que l'utilisateur ne puisse se servir que d'une seul fois chaque élément de lst1 (choix lettres) dans lst2(choix du joueur)"

Ce n'est pas le rôle de la fonction appartenance, il faut aussi réfléchir à la façon de concevoir la résolution d'un problème. Dans ton cas, il faut créer une fonction permettant d'enregistrer les valeurs dans une liste en vérifiant qu'elle n'était déjà pas présente auparavant.

Ça pourrait être une fonction toute simple qui permettrait d'insérer une valeur dans une liste à condition que cette valeur ne soit pas déjà présente. Si elle est présente, la fonction retourne False, sinon True...

def insert(valeur, liste):
    if valeur not in liste:
        liste.append(valeur)
        return True
    return False


Ensuite utiliser cette fonction lors de la demande utilisateur afin d'entrer ses chiffres et ses lettres.
0