1. ホーム
  2. list

[解決済み] TypeError: リストのインデックスは整数でなければならず、floatではない

2022-01-28 06:32:08

質問

Python 3.xのプログラムがエラーを発生させています。

def main():
    names = ['Ava Fischer', 'Bob White', 'Chris Rich', 'Danielle Porter',
             'Gordon Pike', 'Hannah Beauregard', 'Matt Hoyle',
             'Ross Harrison', 'Sasha Ricci', 'Xavier Adams']

    entered = input('Enter the name of whom you would you like to search for:')
    binary_search(names, entered)

    if position == -1:
        print("Sorry the name entered is not part of the list.")
    else:
        print(entered, " is part of the list and is number ", position, " on the list.")
    input('Press<enter>')

def binary_search(names, entered):
    first = 0
    last = len(names) - 1
    position = -1
    found = False

    while not found and first <= last:
        middle = (first + last) / 2

        if names[middle] == entered:
            found = True
            position = middle
        elif names[middle] > entered:
            last = middle - 1
        else:
            first = middle + 1

    return position

main()

エラーは

TypeError: list indices must be integers, not float

このエラーメッセージの意味がわからず困っています。

解決方法を教えてください。

Python 3.xをお使いのようですが、Python 3.xの重要な違いの1つは、除算の処理方法です。あなたが x / y Python 2.xでは10進数が切り捨てられるため、整数が返されます(フロア除算)。しかし、3.xでは / 演算子は '真の' 除算を行い、結果として float の代わりに整数を使用します(例. 1 / 2 = 0.5 ). これが意味するところは、リスト内の位置を参照するためにfloatを使おうとしているということです(例えば my_list[0.5] あるいは my_list[1.0] というのは、Pythonは整数を期待しているからです。したがって、まず middle = (first + last) // 2 その結果、期待通りの結果が得られるように調整します。その結果、期待通りの結果が得られるように調整します。 // は、Python 3.xでの床分割を示します。