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.