in ordine alfabetico if non funziona
Domanda
L'istruzione if sotto ha un problema in qualche parte e non riesco a capirlo. Eventuali convenzioni o di metodo usi impropri che potrebbero causare a non funzionare a destra? lista di controllo è una frase e lis inputed utente è un grande elenco di parole.
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
Soluzione
-
Se lista di controllo è una stringa, poi ci c'è bisogno di
"".join(checkList)
. E 'appena ti restituisce lo stesso stringa:In [94]: checkList="This is a sentence" In [95]: "".join(checkList) Out[95]: 'This is a sentence'
-
La prima linea,
string = "".join(checkList)
ha il torto indentazione. Spostare indietro per essere dilavare con le altre linee del Definizione. -
Do non citarne
string
variabile. esso sostituzioni modulo standard di Python con lo stesso nome. -
Presumibilmente
match(wordList, lis)
restituisce una lista. Il metodo di ordinamento ordina la lista, e ritornaNone
. Dal momento che èNone == None
True
,if match(wordList, lis).sort(key=str.lower) == wordList.sort(key=str.lower):
è sempre vero.
Più probabilmente, ciò che si vuole è
sorted(astr.lower() for astr in match(wordList, lis))==sorted(astr.lower() for astr in wordList)
A differenza del metodo
sort
, il ordinato funzione restituisce la lista ordinata.Alex Martelli punti su,
sorted(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
ha sempre lo stesso valore di verità come
sorted(match(wordList, lis))==sorted(wordList)
Quindi, utilizzando
str.lower
come ilkey
per l'ordinamento (anziché come trasformazione prima di confrontare con==
) non è probabilmente quello che volete. -
La dichiarazione
if condition: return True else: return False
può essere semplificata a
return condition
Altri suggerimenti
.sort
, come quasi ogni altro metodo mutatore di contenitori, i rendimenti None
. Quindi il confronto a.sort()
a b.sort()
è assurdo, perché essi saranno entrambi None
! Credo che si desidera confrontare con sorted(match(wordList, lis), key=str.lower)
sorted(worldList, key=str.lower)
.
Si noti che il key
è in realtà irrilevante il modo in cui lo si usa: se le due liste hanno elementi che differiscono nel caso, saranno non confrontare uguali anche se sono ordinati "paragonabile" !
Quindi, una migliore idea potrebbe essere quella di confrontare sorted(s.lower() for s in match(wordList, lis))
con sorted(s.lower() for s in worList)
. Si noti che il key=
è non necessari dal momento che qui si sta confrontando le in minuscolo Elementi così faranno ordinare quel modo "per natura".