按字母顺序排序if语句不起作用

a s*_*ich 1 python mutators

下面的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  
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

  1. 如果checkList是一个字符串,则不需要"".join(checkList).它只是给你回相同的字符串:

    In [94]: checkList="This is a sentence"    
    In [95]: "".join(checkList)
    Out[95]: 'This is a sentence'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第一行,string = "".join(checkList)有错误的缩进.将其移回与定义中的其他行齐平.

  3. 不要命名变量string.它会覆盖同名的标准Python模块.

  4. 可能会match(wordList, lis) 返回一个列表.sort方法对列表进行排序,然后返回None.既然None == NoneTrue,

    if match(wordList, lis).sort(key=str.lower) ==  wordList.sort(key=str.lower):
    
    Run Code Online (Sandbox Code Playgroud)

    总是如此.

    更有可能的是,你想要的是什么

    sorted(astr.lower() for astr in match(wordList, lis))==sorted(astr.lower() for astr in wordList)
    
    Run Code Online (Sandbox Code Playgroud)

    sort方法不同, sorted函数返回排序列表.

    正如Alex Martelli指出的那样,

    sorted(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
    
    Run Code Online (Sandbox Code Playgroud)

    总是具有相同的真值

    sorted(match(wordList, lis))==sorted(wordList)
    
    Run Code Online (Sandbox Code Playgroud)

    因此,使用str.lower作为key 排序(而不是在比较之前进行转换 ==)可能不是您想要的.

  5. 该声明

    if condition:
        return True
    else:
        return False
    
    Run Code Online (Sandbox Code Playgroud)

    可以简化为

    return condition
    
    Run Code Online (Sandbox Code Playgroud)