example definir define data array list python-3.x binary-search typeerror

definir - list methods python



TypeError: los índices de lista deben ser enteros, no flotantes (4)

Parece que estás usando Python 3.x. Una de las diferencias importantes en Python 3.x es la forma en que se maneja la división. Cuando haces x / y , se devuelve un entero en Python 2.x porque el decimal está truncado (división del piso). Sin embargo, en 3.x, el operador / realiza una división "verdadera", lo que resulta en una float lugar de un entero (por ejemplo, 1 / 2 = 0.5 ). Lo que esto significa es que ahora estás intentando usar un flotador para hacer referencia a una posición en una lista (por ejemplo, my_list[0.5] o incluso my_list[1.0] ), que no funcionará ya que Python espera un entero. Por lo tanto, primero puede intentar usar middle = (first + last) // 2 , ajustando para que el resultado devuelva lo que esperaba. El // indica división de piso en Python 3.x.

Tengo un programa Python 3.x que está produciendo un error:

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()

Error es:

TypeError: list indices must be integers, not float

Tengo problemas para entender qué significa este mensaje de error.


Puedo estar equivocado pero esta línea:

binary_search(names, entered)

no sería

position = binary_search(names, entered)


Tuve este problema al usar ANN y PyBrain en la función testOnData ().

Entonces, resolví este problema al poner "//" en lugar de "/" dentro del índice en el código fuente de backprop.py.

Cambié:

print((''Max error:'', max(ponderatedErrors), ''Median error:'', sorted(ponderatedErrors)[len(errors) / 2])) # <-- Error area

A:

print((''Max error:'', max(ponderatedErrors), ''Median error:'', sorted(ponderatedErrors)[len(errors) // 2])) # <-- SOLVED. Truncated

Espero que te ayude.


Cómo reproducir el error anterior simplemente:

>>> stuffi = [] >>> stuffi.append("foobar") >>> print(stuffi[0]) foobar >>> stuffi[0] = "failwhale" >>> print(stuffi[0]) failwhale >>> stuffi[0.99857] = "skipper" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: list indices must be integers, not float

Si estás golpeando porque tienes este error. Significa que no estás leyendo o entendiendo el mensaje de error. El mensaje de error es perfecto, le dice exactamente lo que está mal y le dice dónde cometió el error también.

Las matrices se indexan por números enteros, le está pasando un número no completo y el intérprete le dice que no puede hacerlo porque no tiene sentido.

Los tutoriales que necesitas revisar son:

"Python array tutorial" "Python floats and primitive types tutorial"

Su variable debe convertirse en un número entero antes de poder usarla para seleccionar un índice de matriz.

Koan:

Un hombre entra en un bar y ordena 1.1195385 cervezas, el barman pone los ojos en blanco y dice: TypeError: beer orders must be whole integers, not fractions.