Skip to content

Andros - Reto para el 28 de mayo 2024 #6

Description

@tanrax
from scipy.spatial.distance import jaccard
# pip install scipy

def calculate_jaccard_distance(seq1: list, seq2: list) -> float:
    """
    Calcula la distancia de Jaccard entre dos secuencias.

    La distancia de Jaccard es una métrica de similitud entre dos conjuntos.
    Jaccard(A, B) = 1 - |A ∩ B| / |A ∪ B|

    Args:
      seq1 -- Primera secuencia.
      seq2 -- Segunda secuencia.

    Returns:
      Valor entre 0.0 y 1.0, siendo 0.0 la máxima similitud y 1.0 la máxima diferencia.

    Raises:
        RaisedError -- Si las secuencias no tienen la misma longitud.
    """
    if len(seq1) == len(seq2) > 0:
        return jaccard(seq1, seq2)
    elif len(seq1) == len(seq2) == 0:
        raise ValueError("Las secuencias no pueden ser vacías.")
    else:
        raise ValueError("Las secuencias deben tener la misma longitud.")


# Ejemplo de uso:
assert calculate_jaccard_distance([1, 1, 1], [2, 2, 2]) == 1.0
assert calculate_jaccard_distance([1, 2, 3], [4, 5, 6]) == 1.0
assert calculate_jaccard_distance([1, 2, 3], [1, 2, 3]) == 0.0
assert calculate_jaccard_distance([1, 1, 8, 8], [1, 1, 1, 1]) == 0.5
def test_function_raises_exception_empty():
    try:
        calculate_jaccard_distance([], [])
    except ValueError:
        pass
    else:
        assert False, "Expected 'Las secuencias no pueden ser vacías.'"
test_function_raises_exception_empty()

def test_function_raises_exception_different_length():
    try:
        calculate_jaccard_distance([1, 2, 3], [1, 2])
    except ValueError:
        pass
    else:
        assert False, "Expected 'Las secuencias deben tener la misma longitud.'"
test_function_raises_exception_different_length()

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions