Re:線形探索

先ほど書いたコードは時間がなくてかなり適当だったのでもう一度。
リスト内包記法の練習もかねて。
リストと探索したい数を与えるとその数の個数と場所を探索する。

def LinearSearch(target, datas):
    # targetに一致する要素が見つかったらその場所を保存
    positionList = [position+1 for position, data in enumerate(datas) if data == target]

    # positionListの長さが見つかったtargetの個数
    count = len(positionList)

    # targetが見つかったかどうかで挙動を変える
    if count == 0:
        return False
    else:
        return count, positionList

if __name__ == "__main__":
    numList = [i*i for i in range(10)]
    print numList

    print LinearSearch(16, numList)
    print LinearSearch(-16, numList)

    numList = [x+y for x in range(15) for y in range(10,20)]
    print numList

    print LinearSearch(16, numList)
    print LinearSearch(-16, numList)

結果は以下のとおり。

C:\mysrc\Python>python test.py
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(1, [5])
False
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]
(7, [7, 16, 25, 34, 43, 52, 61])
False

まあ少しはましになったか。
なんだかPythonたのし。