0

リストがソートされているかどうかを判断する Python 関数を作成するように依頼されました。私は2つのバージョンを持っています:

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
        return False

def is_sorted(t):
    for i in range(len(t) -1 ):
        if t[i] <= t[i + 1]:
            return True
    return False

これら2つの違いは何ですか?私は最初のものにインデントreturn Falseしました。ただし、どちらも同じ結果になります。それらに微妙な違いはありますか?

4

2 に答える 2

2

これらのどちらも、あなたが望むものではありません。最初の 2 つの項目が順番に並んでいるかどうかに関係なく、ループの最初の反復にいるため、最初の 2 つの項目のみが比較さreturnれます (ただし、これらの場合は異なる結果が返されます)。ループはfor実際には何もしません。2 番目の方法では、アイテムが順序どおりでない場合にのみ比較が続行されます。これは、順序どおりのペアが最初に表示されたときに関数から戻るためです。

あなたが望むのはFalse、アイテムが順不同の場合にすぐに戻り (順不同のアイテムのペアを見つけたら、リストがソートされていないことがわかり、それ以上チェックする必要がないため)、ペアの場合にのみ続行することです。すべてTrueアイテムを検査した後にのみ返されます。このような:

def is_sorted(t):
    for i in range(len(t) - 1):
        if t[i] > t[i + 1]:
            return False
    return True

または、all()ジェネレータ式で Python の組み込み関数を使用します。

def is_sorted(t):
    return all(t[i] <= t[i + 1] for i in range(len(t) - 1))
于 2013-11-08T21:42:29.743 に答える
0

return Falseインデントの効果、つまりステートメントが属するブロックを考慮する必要があります。

  • 前者の場合、関数は、2 つの要素を昇順Falseで並べた最初のときに返されます。
  • 後者の場合、すべての要素が昇順でソートされFalseたときに関数が返されます。
于 2013-11-08T21:41:21.033 に答える