2010-10-02 3 views
1

В приведенном ниже описании проблемы есть что-то в этом месте, и я не могу понять это. Любые соглашения или методы, которые могут привести к неправильному функционированию? 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 

ответ

5
  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) возвращает список. Метод сортировки сортирует список и возвращает 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 возвращает отсортированный список.

    В Alex Martelli указывает,

    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

.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= не используется, поскольку вы сравниваете с нижним регистром, чтобы они сортировали этот путь «по своей природе».

 Смежные вопросы

  • Нет связанных вопросов^_^