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 == 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関数はソートされたリストを返します。

    アレックス・マーテリが指摘するように、

    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、コンテナの他のほぼすべてのミューテーター メソッドと同様に、 を返しますNone。と比較a.sort()するのb.sort()はばかげていますNonesorted(match(wordList, lis), key=str.lower)と比較したいと思いますsorted(worldList, key=str.lower)

keyの使用方法は実際には無関係であることに注意してください: 2 つのリストに大文字と小文字が異なる項目がある場合、 「同等に」並べ替えられていても、それらは等しく比較されません!

したがって、 と比較することをお勧めsorted(s.lower() for s in match(wordList, lis))sorted(s.lower() for s in worList)ます。小文字のアイテムをkey=比較しているため、ここでは必要ないことに注意してください。そのため、「本質的に」そのように並べ替えられます。

于 2010-10-02T23:38:00.927 に答える