1

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

2 回答 2

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) 返回一个列表。sort 方法对列表进行排序,并返回None. 既然None == NoneTrue

    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
    
于 2010-10-02T23:42:55.723 回答
4

.sort,就像几乎所有其他容器的 mutator 方法一样,返回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=这里不需要,因为您正在比较小写项目,因此它们会“按自然”方式排序。

于 2010-10-02T23:38:00.927 回答