Skip to content

Andros - Reto para el 28 de mayo 2024 #6

@tanrax

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()

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