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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions