J'ai une liste de tuples, nommément Si je veux vérifier si Mais comment puis-je vérifier si J'ai utilisé f = [(1,2,1), (2,3,0), (1,2,4)] code>. P>
(1,2,1) code> existe dans le
f code> J'utilise
f .__ contient __ ((1,2,1) ) code>. p>
(1,2, juste un numéro) code> ou
(1, n'importe quel numéro, juste un numéro) code> existe dans la liste? < / p>
f .__ contient __ ((1,2, true)) code> mais n'a pas fonctionné correctement. P>
4 Réponses :
>>> T = (1, 2) >>> F = [(1,2,1), (2,3,0), (1,2,4)] >>> any(filter(lambda x:x[:2]==T, F)) True
Pouvez-vous expliquer ce que cela fait?
"Filtre" garde les éléments qui passent le test et "tout" renvoie false si cette liste OS vide.
(1, 2) in [x[:-1] for x in F] Note as already commented do not use contains directly
Ce n'est pas un raccourci. mieux utiliser n'importe quel
@ Jean-Françoisefabre désolé que voulez-vous dire par raccourci? Je suis inconnu
D'accord sur n'importe quel. Essayez tout (x [: 2] == (1, 2) pour x en f) code>. Faible empreinte mémoire, pas de comparaisons inutiles.
Je veux dire que si la liste comporte 400 000 éléments et le premier élément correspondant, vous créez la liste de toute façon.
Je pense que le terme correct est court-circuit i>, btw. Tout retournera vrai dès qu'il rencontre un résultat en vérité. Si vous effectuez des compréhensions de liste, vous ferez d'abord tous les calculs, créez une liste potentiellement énorme, puis recherchez cela.
Mais qu'en est-il du cas lors de la recherche de (1, anynumber, 2) code> ou
(1, anynumber, anynumber) code>?
N'utilisez pas la méthode spéciale code strong> p> __ contient __ code> directement comme mentionné par d'autres ici. Utilisez l'opérateur d'adhésion
dans code> qui effectue la même tâche.
Mais qu'en est-il du cas lors de la recherche de (1, anynumber, 2) code> ou
(1, anynumber, anynumber) code>?
Si tel est le cas, je pense que vous avez besoin d'une chaîne de déclarations if-else code>.
Dans un commentaire Mohammad a demandé une méthode de recherche plus générique. Voici une façon de le faire.
>>> search_2d_list((1,), F) True >>> search_2d_list((1,2), F) True >>> search_2d_list((1,2,1), F) True >>> search_2d_list((1,2,3), F) False >>> search_2d_list((2,2,3), F) False >>> search_2d_list((2,2), F) False >>> search_2d_list((2,None,2), F) False >>> search_2d_list((2,None,0), F) True
Si vous devrez peut-être correspondre à aucune dans les recherches, vous pouvez définir une base générique de classe et utiliser cela au lieu de non aucun.
N'utilisez jamais
__ contient __ code> directement, ne pas utiliser les méthodes Dunder directement
f .__ contient __ ((1,2, true)) code> renvoie
true code>. Pourquoi ne pas simplement utiliser
" code>?
(1,2, true) en f code>
Vous allez avoir à utiliser
tout code>:
tout (x [0: 2] == (1,2) pour x en f) code>