Êtes-vous mathématicien? Décrire des choses simples d'une manière trop complexe ..;)
ThiefMaster
13
Informaticien. Je suis juste un peu confus parce que la documentation dit "Tester x pour l'appartenance à s". Pour moi, cela pourrait signifier "l'instance x est contenue dans s" ou "une instance existe dans s qui a la même valeur que x". Je ne sais pas s'il s'agit d'une comparaison d'identité ou d'égalité.
Dejas
6
@Dejas: Puisque vous savez que Python a deux opérateurs Comparaison d'égalité et comparaison d'identité, vous devriez être en mesure de construire une expérience qui confirme chacun. Cela vous aiderait si vous publiez cette expérience.
S.Lott
Réponses:
101
Oui, mais cela signifie aussihash(b) == hash(x) que l'égalité des éléments n'est pas suffisante pour les rendre identiques.
Ce n'est pas un très bon test car les constantes de chaîne sont souvent internées (essayez a = 'a'; b = 'a'; a is b). Je l'ai essayé avec à la a = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])place.
Philipp
11
Oui, cela peut signifier ainsi, ou cela peut être un simple itérateur. Par exemple: Exemple comme itérateur:
a=set(['1','2','3'])for x in a:print('This set contains the value '+ x)
De même comme chèque:
a=set('ILovePython')if'I'in a:print('There is an "I" in here')
modifié: modifié pour inclure des ensembles plutôt que des listes et des chaînes
eh bien, je suppose qu'une liste ou même une chaîne peut être considérée comme ayant des propriétés similaires à un ensemble. Ils sont une collection d'éléments.
Arnab Ghosal
1
Non, les ensembles ont une condition supplémentaire pour un contrôle de confinement, contrairement aux séquences.
Ignacio Vazquez-Abrams
3
Les chaînes, bien qu'elles ne soient pas des settypes, ont une inpropriété précieuse lors de la validation dans les scripts:
yn = input("Are you sure you want to do this? ")if yn in"yes":#accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes'returnTruereturnFalse
J'espère que cela vous aidera à mieux comprendre l'utilisation de incet exemple.
Réponses:
Oui, mais cela signifie aussi
hash(b) == hash(x)
que l'égalité des éléments n'est pas suffisante pour les rendre identiques.la source
C'est vrai. Vous pouvez l'essayer dans l'interpréteur comme ceci:
la source
a = 'a'; b = 'a'; a is b
). Je l'ai essayé avec à laa = (1, 2, 3); b = (1, 2, 3); a == b; hash(a) == hash(b); a is b; a in set([b])
place.Oui, cela peut signifier ainsi, ou cela peut être un simple itérateur. Par exemple: Exemple comme itérateur:
De même comme chèque:
modifié: modifié pour inclure des ensembles plutôt que des listes et des chaînes
la source
Les chaînes, bien qu'elles ne soient pas des
set
types, ont unein
propriété précieuse lors de la validation dans les scripts:J'espère que cela vous aidera à mieux comprendre l'utilisation de
in
cet exemple.la source
... or 'e' or 'es' or 's'
. Pensez simplement à supprimer cette mauvaise réponse inutile.Les sets se comportent différemment des dicts, vous devez utiliser des opérations set comme issubset ():
la source