Comprender la comparación de conjuntos

Entonces, mi problema es entender la comparación entre listas.

Tenía una tarea para comparar si alguna cadena tiene todas las letras del alfabeto, así que hice esto:

import string def ispangram(str): letters = ''.join(str.split()).lower() unique_letters = set(letters) sorted_list = list(sorted(unique_letters)) str_alphabet = ''.join(sorted_list) alphabet = string.ascii_lowercase if str_alphabet == alphabet: print(True) else: print(False) ispangram("The quick brown fox jumps over the lazy dog") 

Ok, tengo la verdad, eso está bien. Pero la otra manera para la respuesta es:

 import string def ispangram(str): alphabet = string.ascii_lowercase alphaset = set(alphabet) return alphaset <= set(str.lower()): ispangram("The quick brown fox jumps over the lazy dog") 

Así que este “<=" que no puedo entender. ¿Se compara letra por letra en la lista de conjunto único? ¿O simplemente comparar la longitud de la misma? Porque sin unirme también obtengo espacio ''. ¿Y cómo "<=" compara si solo "set (str.lower ())" no ordena cada letra?

Espero que alguien me pueda ayudar, muchas gracias!

    El operador <= para conjuntos, verifica si el operando en el LHS es un subconjunto del que está en el RHS.

    Más verbalmente:

     alphaset.issubset(my_str.lower()) # issubset takes any iterable 

    En una nota al margen, tenga cuidado de no usar str como nombre para no inutilizar el str incorporado dentro de su función.