下面的 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. 如果清单是字符串,则无需 "".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 == 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(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
    

其他提示

.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=这里不需要,因为你比较的小写的项目,这样他们就会“自然”排序的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top