0

コードは次のとおりです。

def findsort(something, alist):
    for item in alist:
        if item == something:
            return "found"
        else:
            return "not found"

def main():

    print(findsort(6, [3, 6, 1, 8, 11, 14]))

main()

何らかの理由で、これは私が思っていたようには機能しません。

これを実行すると、「見つかりません」と表示されます。ただし、検索する値をリストの最初の項目である 3 に変更すると、「見つかった」として返されます。

文字列でこれを試しましたが、同じ結果が得られました。

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

5

最初の繰り返しでアイテムが一致しない場合、「見つかりません」を返すelseブランチに入り、ループを終了します。

これを試して:

def findsort(something, alist):
    for item in alist:
        if item == something:
            return "found"
    return "not found"

または単に:

def findsort(something, alist):
    return "found" if something in alist else "not found"
于 2012-12-13T03:35:29.723 に答える
2

@hyperboreus は、エラーの原因を指摘しました(elseすべての項目が表示される前に実行されるブランチ)。

ソートされた(「順序付けられた」) リスト内の項目を見つけるには、線形検索( ) の代わりにバイナリ検索 ( ) を実行するbisectモジュールを使用できます。線形検索。O(log(n)item in alistO(n)

from bisect import bisect

findsort = lambda x, L: "found" if L and L[bisect(L,x) - 1] == x else "not found"
于 2012-12-13T04:17:25.427 に答える