Je cherche le moyen le plus efficace de comparer deux chaînes, et je ne suis pas sûr de la meilleure: == ou dans . Ou y a-t-il un autre moyen de le faire qui soit plus efficace que l'un ou l'autre?
Modifier: j'essaye de vérifier l'égalité
3 Réponses :
Ils font des choses différentes.
== tests d'égalité:
"tomato" in "tomato" # true "potato" in "tomato" # false "mat" in "tomato" # true <-- this is different than above
dans tests pour sous-chaîne , et peut être considérée comme une version (probablement) plus efficace de str.find ()! = -1 ):
"tomato" == "tomato" # true "potato" == "tomato" # false "mat" == "tomato" # false
Dans les deux cas, ils sont les moyens les plus efficaces disponibles pour faire ce qu'ils font. Si vous les utilisez pour comparer si deux chaînes sont réellement égales, alors bien sûr strA == strB est plus rapide que (strA dans strB) et (strB dans strA) .
Veuillez définir "comparer".
Si vous voulez savoir si 2 chaînes sont égales, == est le moyen le plus simple.
Si vous voulez savoir si 1 chaîne en contient une autre, c'est le moyen le plus simple.
Si vous voulez savoir à quel point ils se chevauchent, compte tenu des lacunes, vous avez besoin d'algorithmes compliqués. Que diriez-vous d'un livre épais sur les algorithmes? (Ceci est similaire à la comparaison de séquences génétiques. Je pense qu'un livre sur les algorithmes bioinformatiques serait également très utile. Quoi qu'il en soit, ce cas est bien trop compliqué pour Stack Overflow.)
MODIFIER:
Pour l'égalité, restez avec "==". C'est en Python pour faire son travail.
== en Python est là à des fins de comparaison, tandis que "in" a une définition plus large (contient ce qui inclut la comparaison). En règle générale, les constructions d'objectif précises et claires sont les plus optimisées pour faire le travail ciblé, car les constructions indirectes sont généralement basées sur des constructions simples et directes, ce qui devrait rendre == meilleur dans le contexte de comparaison et moins sujet aux erreurs.
Jusqu'à ce que vous rencontriez un problème de performances connu avec votre code lors de la comparaison de chaînes, choisissez l'une par rapport à l'autre. Idiomatiquement, j'ai vu
==mais encore une fois cela dépend de ce que vous faites.Vous semblez demander quelque chose comme "qui est le plus efficace, une pomme ou une orange?".
danset==ne font pas la même chose.@JohnColeman Gotcha. Quels sont les autres moyens de tester l'égalité?
@wolfy vous n'avez pas besoin d'autres moyens pour tester l'égalité, utilisez
==. "Il devrait y avoir une - et de préférence une seule - façon évidente de le faire." - Tim Peters, Zen of PythonJe ne peux pas imaginer un bon cas d'utilisation pour autre chose que
==pour tester l'égalité des chaînes.@Chris_Rands Merci! Je vais donner une lecture
Vous trouverez peut-être cette question intéressante.