下面的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)
如果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)第一行,string =
"".join(checkList)有错误的缩进.将其移回与定义中的其他行齐平.
不要命名变量string.它会覆盖同名的标准Python模块.
可能会match(wordList, lis)
返回一个列表.sort方法对列表进行排序,然后返回None.既然None == None是True,
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
排序(而不是在比较之前进行转换
==)可能不是您想要的.
该声明
if condition:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
可以简化为
return condition
Run Code Online (Sandbox Code Playgroud)