Pregunta

import difflib

a='abcd'
b='ab123'
seq=difflib.SequenceMatcher(a=a.lower(),b=b.lower())
seq=difflib.SequenceMatcher(a,b)
d=seq.ratio()*100
print d

Usé el código anterior pero la salida obtenida es 0.0. ¿Cómo puedo obtener una respuesta válida?

¿Fue útil?

Solución

Olvidó el primer parámetro en secuencematcher.

>>> import difflib
>>> 
>>> a='abcd'
>>> b='ab123'
>>> seq=difflib.SequenceMatcher(None, a,b)
>>> d=seq.ratio()*100
>>> print d
44.4444444444

http://docs.python.org/library/difflib.html

Otros consejos

De los documentos:

los Secuencematcher La clase tiene este constructor:

class difflib.SequenceMatcher(isjunk=None, a='', b='', autojunk=True)

El problema en su código es que al hacer

seq=difflib.SequenceMatcher(a,b)

estas pasando a como valor para isjunk y b como valor para a, dejando el valor predeterminado '' valor por b. Esto da como resultado una relación de 0.0.

Una forma de superar esto (ya mencionado por Lennart) es pasar explícitamente None Como primer parámetro adicional, a todos los argumentos de palabras clave se asignan los valores correctos.

Sin embargo, acabo de encontrar, y quería mencionar otra solución, que no toca el isjunk argumento pero usa el set_seqs() Método para especificar las diferentes secuencias.

>>> import difflib
>>> a = 'abcd'
>>> b = 'ab123'
>>> seq = difflib.SequenceMatcher()
>>> seq.set_seqs(a.lower(), b.lower())
>>> d = seq.ratio()*100
>>> print d
44.44444444444444
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top