2010-10-02 6 views
1

L'instruction if ci-dessous a un problème quelque part et je ne peux pas le comprendre. Toutes les conventions ou les mauvais usages de la méthode qui pourraient causer son mauvais fonctionnement? checkList est une phrase entrée par l'utilisateur et lis est une grande liste de mots.trié par ordre alphabétique si l'instruction ne fonctionne pas

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 

Répondre

5
  1. Si AIDE-MÉMOIRE est une chaîne, alors il n'y a pas besoin de "".join(checkList). Il vous donne tout juste la même chaîne :

    In [94]: checkList="This is a sentence"  
    In [95]: "".join(checkList) 
    Out[95]: 'This is a sentence' 
    
  2. La première ligne, string = "".join(checkList) a la mauvaise indentation . Rapportez-le pour qu'il soit aligné sur les autres lignes de la définition .

  3. Ne nommez pas une variable string. Il remplace le module Python standard du même nom.

  4. Vraisemblablement, match(wordList, lis) renvoie une liste. La méthode de tri trie la liste et renvoie None. Depuis None == None est True,

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

    est toujours vrai.

    Plus probablement, ce que vous voulez est

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

    Contrairement à la méthode sort, la fonction retourne sorted la liste triée .

    Comme Alex Martelli souligne,

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

    a toujours la même valeur de vérité que

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

    Donc, en utilisant str.lower comme key pour le tri (plutôt que comme une transformation avant de comparer avec ==) n'est probablement pas ce que vous voulez.

  5. La déclaration

    if condition: 
        return True 
    else: 
        return False 
    

    peut être simplifié à

    return condition 
    
4

.sort, comme à peu près toutes les autres méthodes de mutator des conteneurs, retourne None. Donc comparer a.sort() à b.sort() est absurde car ils seront tous les deux None! Je pense que vous voulez comparer sorted(match(wordList, lis), key=str.lower) avec sorted(worldList, key=str.lower).

Notez que le key est en fait hors de propos la façon dont vous l'utilisez: si les deux listes ont des éléments qui diffèrent dans le cas, ils seront pas comparer l'égalité, même s'ils sont classés « comparable »! Une meilleure idée pourrait être de comparer sorted(s.lower() for s in match(wordList, lis)) avec sorted(s.lower() for s in worList). Notez que le key= n'est pas nécessaire ici puisque vous comparez les articles en minuscules afin qu'ils trient de cette façon "par nature".

Questions connexes