题
下面的 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
解决方案
如果清单是字符串,则无需
"".join(checkList)
。它只是让您返回相同的字符串:In [94]: checkList="This is a sentence" In [95]: "".join(checkList) Out[95]: 'This is a sentence'
第一行,
string = "".join(checkList)
有错误的凹痕。将其移回定义中的其他行以齐平。不要命名变量
string
. 。它覆盖了同名的标准Python模块。想必
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(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
始终具有相同的真值
sorted(match(wordList, lis))==sorted(wordList)
所以使用
str.lower
作为key
用于分类(而不是作为转换,然后再进行比较==
)可能不是您想要的。该声明
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=
这里不需要,因为你比较的小写的项目,这样他们就会“自然”排序的方式。