172 votes

Peut-Python test de la composition de plusieurs valeurs dans une liste?

Je veux tester si deux ou plusieurs valeurs ont des membres d'une liste, mais j'obtiens un résultat inattendu:

>>> 'a','b' in ['b', 'a', 'foo', 'bar']
('a', True)

Ainsi, Peut-Python test de la composition de plusieurs valeurs à la fois dans une liste? Ce n'est que le résultat signifie?

281voto

senderle Points 41607

De ce fait ce que vous voulez:

>>> all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])
True

Votre résultat se produit parce que python interprète votre expression comme un n-uplet:

>>> 'a', 'b'
('a', 'b')
>>> 'a', 5 + 2
('a', 7)
>>> 'a', 'x' in 'xerxes'
('a', True)

72voto

Kabie Points 5197

Une autre façon de faire:

>>> set(['a','b']).issubset( ['b','a','foo','bar'] )
True

11voto

Foon Points 1551

Je suis sûr que in est d'avoir une priorité plus élevée que , si votre déclaration est interprété comme 'a', ('b' dans ['b',...]), qui évalue ensuite à 'a',Vrai que " b " est dans le tableau.

Voir réponse précédente pour savoir comment faire ce que vous voulez.

4voto

dcrosta Points 11219

Le Python analyseur évalué cette déclaration comme un n-uplet, dans lequel la première valeur est 'a', et la seconde valeur est l'expression 'b' in ['b', 'a', 'foo', 'bar'] (qui prend la valeur True).

Vous pouvez écrire une fonction simple de faire ce que vous voulez, si:

def all_in(candidates, sequence):
    for element in candidates:
        if element not in sequence:
            return False
    return True

Et de l'appeler comme:

>>> all_in(('a', 'b'), ['b', 'a', 'foo', 'bar'])
True

1voto

user1419042 Points 31

Deux des réponses présentées ici ne seront pas gérer les éléments répétés. Par exemple, si vous testez si [1,2,2] est une sous-liste de [1,2,3,4], les deux renvoie la valeur True. Qui peut être ce que tu veux faire, mais je voulais juste préciser. Si vous souhaitez retourner false pour [1,2,2] dans [1,2,3,4], vous avez besoin de trier les deux listes et vérification de chaque élément avec un mouvement de l'index sur chaque liste. Juste un peu plus compliqué pour la boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X