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たのし。