по алфавиту, если выписка не работает - PullRequest
1 голос
/ 03 октября 2010

В приведенном ниже утверждении if есть проблема, и я не могу ее понять.Любые соглашения или неправильное использование методов, которые могут быть причиной его неправильной работы?checkList - это пользовательское предложение, а lis - большой список слов.

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  

Ответы [ 2 ]

5 голосов
/ 03 октября 2010
  1. Если checkList является строкой, тогда "".join(checkList) не требуется.Он просто возвращает вам ту же строку:

    In [94]: checkList="This is a sentence"    
    In [95]: "".join(checkList)
    Out[95]: 'This is a sentence'
    
  2. В первой строке string = "".join(checkList) указан неверный отступ.Переместите его назад, чтобы он совпал с другими строками в определении.

  3. Не называйте переменную string.Он переопределяет стандартный модуль Python с тем же именем.

  4. Предположительно match(wordList, lis) возвращает список.Метод sort сортирует список и возвращает None.Поскольку None == None - это True,

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

    всегда верно.

    Скорее всего, вам нужно

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

    В отличие от sort методафункция sorted возвращает отсортированный список.

    Как указывает Алекс Мартелли ,

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

    всегда имеет то же значение истинности, что и

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

    Поэтому использование str.lower в качестве key для сортировки (а не в качестве преобразования перед сравнением с ==), вероятно, не то, что вам нужно.

  5. Выражение

    if condition:
        return True
    else:
        return False
    

    можно упростить до

    return condition
    
4 голосов
/ 03 октября 2010

.sort, как и любой другой метод контейнеров-мутаторов, возвращает None. Так что сравнивать a.sort() с b.sort() абсурдно, потому что они оба будут None! Я думаю, что вы хотите сравнить sorted(match(wordList, lis), key=str.lower) с sorted(worldList, key=str.lower).

Обратите внимание, что key на самом деле не имеет отношения к тому, как вы его используете: если два списка имеют элементы, различающиеся регистром, они будут не сравниваться равными, даже если они отсортированы "сравнительно «!

Так что лучшей идеей может быть сравнение sorted(s.lower() for s in match(wordList, lis)) с sorted(s.lower() for s in worList). Обратите внимание, что key= здесь не требуется, поскольку вы сравниваете элементы в нижнем регистре , чтобы они сортировались таким образом «по природе».

...