按字母顺序排序 if 语句不起作用

发布于 2024-09-25 12:49:47 字数 374 浏览 3 评论 0原文

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

The if statement below has a problem in it somewhere and I can not figure it out. Any conventions or method misuses that might be causing it to not function right? checkList is a user inputed sentence and lis is a large list of words.

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  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流年已逝 2024-10-02 12:49:47
  1. 如果 checkList 是一个字符串,那么有
    不需要"".join(checkList)
    它只是给你同样的回报
    字符串:

    在[94]中:checkList="这是一个句子"    
    在[95]中:“”.join(checkList)
    Out[95]: '这是一个句子'
    
  2. 第一行,string =
    "".join(checkList)
    有错误
    缩进。将其移回原来的位置
    与其他线齐平
    定义。

  3. 不要将变量命名为字符串。它
    覆盖标准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 函数返回
    排序列表。

    正如 Alex Martelli 指出的,

    sorted(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
    

    始终具有与

    相同的真值

    已排序(匹配(wordList,lis))==已排序(wordList)
    

    因此使用str.lower作为
    用于排序(而不是作为
    比较之前进行转换
    ==) 可能不是您想要的。

  5. 声明

    如果条件:
        返回真
    别的:
        返回错误
    

    可以简化为

    返回条件
    
  1. If checkList is a string, then there
    is no need for "".join(checkList).
    It just gives you back the same
    string:

    In [94]: checkList="This is a sentence"    
    In [95]: "".join(checkList)
    Out[95]: 'This is a sentence'
    
  2. The first line, string =
    "".join(checkList)
    has the wrong
    indentation. Move it back to be
    flush with the other lines in the
    definition.

  3. Don't name a variable string. It
    overrides the standard Python module
    of the same name.

  4. Presumably match(wordList, lis)
    returns a list. The sort method
    sorts the list, and returns None.
    Since None == None is True,

    if match(wordList, lis).sort(key=str.lower) ==  wordList.sort(key=str.lower):
    

    is always true.

    More likely, what you want is

    sorted(astr.lower() for astr in match(wordList, lis))==sorted(astr.lower() for astr in wordList)
    

    Unlike the sort method, the
    sorted function returns the
    sorted list.

    As Alex Martelli points out,

    sorted(match(wordList, lis),key=str.lower)==sorted(wordList,key=str.lower)
    

    always has the same truth value as

    sorted(match(wordList, lis))==sorted(wordList)
    

    So using str.lower as the key
    for sorting (rather than as a
    transformation before comparing with
    ==) is probably not what you want.

  5. The statement

    if condition:
        return True
    else:
        return False
    

    can be simplified to

    return condition
    
倾城月光淡如水﹏ 2024-10-02 12:49:47

.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=,因为您正在比较小写 项目,因此它们会“按性质”按这种方式排序。

.sort, like just about every other mutator method of containers, returns None. So comparing a.sort() to b.sort() is absurd because they'll both be None! I think you want to compare sorted(match(wordList, lis), key=str.lower) with sorted(worldList, key=str.lower).

Note that the key is actually irrelevant the way you're using it: if the two lists have items that differ in case, they will not compare equal even if they're sorted "comparably"!

So a better idea might be to compare sorted(s.lower() for s in match(wordList, lis)) with sorted(s.lower() for s in worList). Note that the key= is unneeded here since you're comparing the lowercased items so they'll sort that way "by nature".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文