msi instalar idle espaƱol descargar python python-idle

python - instalar - TypeError: el objeto ''filtro'' no es suscriptable



python msi (3)

Use la list antes del filter entonces funciona bien. Para mi se resolvió el problema.

Por ejemplo

list(filter(lambda x: x%2!=0, mylist))

en lugar de

filter(lambda x: x%2!=0, mylist)

Estoy recibiendo el error

TypeError: ''filter'' object is not subscriptable

Al intentar ejecutar el siguiente bloque de código

bonds_unique = {} for bond in bonds_new: if bond[0] < 0: ghost_atom = -(bond[0]) - 1 bond_index = 0 elif bond[1] < 0: ghost_atom = -(bond[1]) - 1 bond_index = 1 else: bonds_unique[repr(bond)] = bond continue if sheet[ghost_atom][1] > r_length or sheet[ghost_atom][1] < 0: ghost_x = sheet[ghost_atom][0] ghost_y = sheet[ghost_atom][1] % r_length image = filter(lambda i: abs(i[0] - ghost_x) < 1e-2 and abs(i[1] - ghost_y) < 1e-2, sheet) bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ] bond.sort() #print >> stderr, ghost_atom +1, bond[bond_index], image bonds_unique[repr(bond)] = bond # Removing duplicate bonds bonds_unique = sorted(bonds_unique.values())

Y

sheet_new = [] bonds_new = [] old_to_new = {} sheet=[] bonds=[]

El error se produce en la línea.

bond[bond_index] = old_to_new[sheet.index(image[0]) + 1 ]

Pido disculpas por el hecho de que este tipo de pregunta se haya publicado TAN muchas veces, pero soy bastante nuevo en Python y no entiendo completamente los diccionarios. ¿Estoy tratando de usar un diccionario de una manera en que no debería usarse, o debería estar usando un diccionario donde no lo estoy usando? Sé que la solución es probablemente muy simple (aunque no para mí), y le estaré muy agradecido si alguien me pudiera orientar en la dirección correcta.

Una vez más, me disculpo si esta pregunta ya ha sido respondida

Gracias,

Chris

Estoy usando Python IDLE 3.3.1 en Windows 7 de 64 bits.


filter() en python 3 no devuelve una lista, sino un objeto de filter iterable. Llame a next() para obtener el primer elemento filtrado:

bond[bond_index] = old_to_new[sheet.index(next(image)) + 1 ]

No hay necesidad de convertirlo en una lista, ya que solo usa el primer valor.


image = list(filter(lambda i: abs(i[0] - ghost_x) < 1e-2 and abs(i[1] - ghost_y) < 1e-2, sheet))