Pregunta

La sentencia if continuación tiene un problema en algún lugar y no puedo entenderlo. Los convenios o mal uso de métodos que podrían ser la causa de que no funcione la derecha? Lista de verificación es una sentencia inputed de usuario y lis es una gran lista de palabras.

def realCheck(checkList):  
        string = "".join(checkList)  
    print string  
    wordList = string.split()  
    if match(wordList, lis).sort(key=str.lower) == wordList.sort(key=str.lower):  
        return True  
    else:  
        return False  
¿Fue útil?

Solución

  1. Si lista de verificación es una cadena, entonces hay hay necesidad de "".join(checkList). Sólo le devuelve la misma cadena:

    In [94]: checkList="This is a sentence"    
    In [95]: "".join(checkList)
    Out[95]: 'This is a sentence'
    
  2. En la primera línea, string = "".join(checkList) tiene el mal sangría. Moverlo de nuevo a ser enjuagar con las otras líneas en el definición.

  3. No nombre una variable string. Eso Reemplaza el módulo estándar de Python del mismo nombre.

  4. Es de suponer que match(wordList, lis) devuelve una lista. El método para ordenar ordena la lista, y vuelve None. Desde None == None es True,

    if match(wordList, lis).sort(key=str.lower) ==  wordList.sort(key=str.lower):
    

    siempre es cierto.

    Lo más probable, lo que quiere es

    sorted(astr.lower() for astr in match(wordList, lis))==sorted(astr.lower() for astr in wordList)
    

    A diferencia del método sort, la ordenada función devuelve el lista ordenada.

    Como Alex Martelli señala,

    sorted(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
    

    siempre tiene el mismo valor de verdad como

    sorted(match(wordList, lis))==sorted(wordList)
    

    Así que usando str.lower como el key para la clasificación (en lugar de como una transformación antes de comparar con ==) probablemente no es lo que desea.

  5. La declaración

    if condition:
        return True
    else:
        return False
    

    se puede simplificar a

    return condition
    

Otros consejos

.sort, como casi todos los otros método de mutador de contenedores, devoluciones None. Por lo tanto la comparación de a.sort() a b.sort() es absurdo, porque van a ser tanto None! Creo que se quiere comparar con sorted(match(wordList, lis), key=str.lower) sorted(worldList, key=str.lower).

Tenga en cuenta que la key es realmente irrelevante la forma en que lo está utilizando: si las dos listas tienen elementos que difieren en su caso, no comparar iguales incluso si están ordenados "comparable" !

Por lo tanto una mejor idea podría ser comparar con sorted(s.lower() for s in match(wordList, lis)) sorted(s.lower() for s in worList). Tenga en cuenta que la key= está aquí, ya que no necesite que está comparando los en minúsculas Líneas lo que van a ordenar esa manera "por naturaleza".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top