Skip to main content
 首页 » 编程设计

python之如果语句不起作用,则按字母顺序排序

2025年05月04日9xiaohuochai

下面的 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   

请您参考如下方法:

  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