Python - insertar elemento en un array

 
Vista:
sin imagen de perfil

insertar elemento en un array

Publicado por Severus (5 intervenciones) el 29/01/2023 21:26:34
Hola, tengo este codigo. al recorrer el array intento insertar un elemento, pero el codigo nunca finaliza. No me manda error ni nada. Porque no funciona?


1
2
3
4
def insertar(a):
    for i in a:
        if i<0:
            a.insert(i,0)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Camilo
Val: 40
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

insertar elemento en un array

Publicado por Camilo (13 intervenciones) el 30/01/2023 00:08:38
Buenas tardes Severus.

La razón por la que el código nunca termina es que en cada iteración del for se agrega un elemento, por tanto se debe hacer otra iteración y así sucesivamente, una solución a esto es manejar otra lista en la que se va a agregar el elemento, por ejemplo:

1
2
3
4
5
6
7
8
def insertar(a):
 
    lista_nueva = a.copy()
    for i in a:
        if i<0:
            lista_nueva.insert(i,0)
 
    return lista_nueva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

insertar elemento en un array

Publicado por Severus (5 intervenciones) el 30/01/2023 00:39:21
No entendí, al entrar al array tengo un numero finito de números negativos. Porque nunca termina?
Otra cosa, hay alguna forma de solucionarlo sin una lista nueva o auxiliar?, o modificando directamente la lista(o array) original?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

insertar elemento en un array

Publicado por Severus (5 intervenciones) el 30/01/2023 00:39:42
No entendí, al entrar al array tengo un numero finito de números negativos. Porque nunca termina?
Otra cosa, hay alguna forma de solucionarlo sin una lista nueva o auxiliar?, o modificando directamente la lista(o array) original?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

insertar elemento en un array

Publicado por Severus (5 intervenciones) el 30/01/2023 00:58:55
Y si hago esto?:
1
2
3
4
5
def insertar(a):
    l=len(a)
    for i in range(0,l):
        if i<0:
            a.insert(i,0)

Porque no se me agrega, de esta forma el programa termina pero igual no funciona
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Camilo
Val: 40
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

insertar elemento en un array

Publicado por Camilo (13 intervenciones) el 30/01/2023 02:34:34
El código no le funciona porque se está haciendo la comparación con el índice, y no con el elemento, no obstante entiendo lo que quiere hacer, y sí, hay una forma de crear el código sin una lista auxiliar:

1
2
3
4
5
6
7
def insertar(a):
    l=len(a)
    for i in range(0,len(a)):
        if a[i]<0:
            a.insert(i,0)
 
    return a

Sobre la duda de porqué nunca termina, intentaré utilizar el código del inicio iteración por iteración:

1
2
3
4
def insertar(a):
    for i in a:
        if i<0:
            a.insert(i,0)

Para el arreglo a = [1,1,-1]
Revisaremos el final de cada iteración
Iteración 1:
i = 1
a = [1,1,-1]
Iteración 2:
i = 1
a = [1,1,-1]
Iteración 3:
i = -1
a = [1,1,0,-1]
Iteración 4:
i = -1
a = [1,1,0,0,-1]

Y por eso no termina, si quiere saber más sobre ese efecto, revise qué es la recursividad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

insertar elemento en un array

Publicado por Severus (5 intervenciones) el 30/01/2023 03:03:25
Entiendo lo que me decis, pero parece que yo me había explicado mal. Yo tenía entendido que se inserta el elemento después del negativo, no antes. Por eso no pregunté. Y eso es lo que quiero hacer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Camilo
Val: 40
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

insertar elemento en un array

Publicado por Camilo (13 intervenciones) el 30/01/2023 03:36:39
Eso lo cambia todo, de esta manera aparecen los ceros antes y después del -1:

1
2
3
4
5
6
7
8
9
10
11
12
#Inserta después del -1
def insertar(a):
 
    for pos, i in enumerate(a):
 
        if i==0:
            continue
 
        if i<0:
            a.insert(pos+1,0)
 
    return a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#Inserta antes del -1
def insertar(a):
 
    ignorar = False
 
    for pos, i in enumerate(a):
 
        if ignorar:
            ignorar = False
            continue
 
        if i<0:
            a.insert(pos,0)
            ignorar = True
 
    return a
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar