ordenada alfabéticamente si la declaración no funciona
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
Solución
-
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'
-
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. -
No nombre una variable
string
. Eso Reemplaza el módulo estándar de Python del mismo nombre. -
Es de suponer que
match(wordList, lis)
devuelve una lista. El método para ordenar ordena la lista, y vuelveNone
. DesdeNone == None
esTrue
,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 elkey
para la clasificación (en lugar de como una transformación antes de comparar con==
) probablemente no es lo que desea. -
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".