¿Cómo funciona esto? ¿Comprueba si una cadena contiene cada carácter de a-z al menos una vez?

import string

def ispangram(str1, alphabet=string.ascii_lowercase):  
    alphaset = set(alphabet)  
    return alphaset <= set(str1.lower()) 

Esto devuelve True, por ejemplo:

ispangram("The quick brown fox jumps over the lazy dog")

Solo puedo suponer que tiene algo que ver con el orden lexográfico como se indica aquí, pero aún está un poco confundido.

Comparar dos listas usando el operador mayor o menor que

Cuando leo el enlace en esta pregunta SO:

https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types

Dice:

Los objetos de secuencia se pueden comparar con otros objetos con el mismo tipo de secuencia. La comparación utiliza el orden lexicográfico: primero se comparan los dos primeros elementos, y si difieren, esto determina el resultado de la comparación; si son iguales, se comparan los siguientes dos elementos, y así sucesivamente, hasta que se agote cualquier secuencia. Si dos elementos a comparar son secuencias del mismo tipo, la comparación lexicográfica se realiza de forma recursiva. Si todos los elementos de dos secuencias se comparan igual, las secuencias se consideran iguales. Si una secuencia es una subsecuencia inicial de la otra, la secuencia más corta es la más pequeña (menor). El ordenamiento lexicográfico de cadenas utiliza el número de punto de código Unicode para ordenar caracteres individuales. Algunos ejemplos de comparaciones entre secuencias del mismo tipo.

Pero esto no está claro para mí.

3
smackenzie 31 oct. 2017 a las 01:42

3 respuestas

La mejor respuesta

Es una operación set, no list. Que es equivalente a,

alphaset.issubset(set(str1.lower()))

s <= t

s.subset (t)

Pruebe si cada elemento en s está en t.

Mira aquí: https://docs.python.org/2/library/sets.html

Editar: Consulte aquí la versión actual de Establecer. Aunque se da una explicación más fácil en la versión anterior (para comparaciones).

6
Rockybilly 30 oct. 2017 a las 23:02

No. Está comparando dos conjuntos. Entonces convierte la cadena de entrada a minúsculas y luego usa el tipo de conjunto de Python para compararlo con el conjunto de letras minúsculas.

Esta es una técnica muy útil (y rápida) para comparar dos listas para ver qué miembros tienen en común / diferencia.

2
TimGJ 30 oct. 2017 a las 22:51
def pangram(s):
alphabet = set('abcdefghijklmnopqrstuvwxyz')
s = s.replace(' ','').lower()
s= sorted(s)

count = {}

    #alphabet could be one sting within '' later sorted, but I just went straight to the point. 
    #After initializing my dictionary at null, we start the count    

for letter in s:
    if letter in count:
        count[letter] =[]
    else:
        count[letter] = 1

for letter in alphabet:
    if letter in count:
        count[letter] =[]
    else:
        count[letter] = 0
for letter in count:
    if count[letter]== 0:
        print (letter +' missing!')
print (count[letter]!= 0)
0
Humphrey 2 mar. 2018 a las 23:30