-
-
Save hcosta/d60379cab2df4e3c920a76c5ad806194 to your computer and use it in GitHub Desktop.
| # La solución provista es incorrecta debido a lo siguiente: | |
| del( l[i] ) | |
| # Al borrar el elemento de la posición actual hay que tener en cuenta que | |
| # la siguiente vez que recorremos la lista, el índice habrá corrido una | |
| # posición pero el número de elementos se habrá reducido y por tanto | |
| # no se borrará el elemento que toca. | |
| # Si en lugar de eliminar los elementos de la lista, generamos una nueva | |
| # lista sólo con los pares, entonces todo se soluciona bien: | |
| def modificar(l): | |
| l = list(set(l)) # Borrar los elementos duplicados (recrea la lista a partir de un nuevo diccionario) | |
| l.sort(reverse=True) # Ordenar la lista de mayor a menor | |
| l_tmp = [] # Lista temporal que contendrá solo los números pares | |
| for n in l: | |
| if n%2 == 0: | |
| l_tmp.append(n) | |
| suma = sum(l_tmp) # Realizar una suma de todos los números que quedan | |
| l_tmp.insert(0, suma) # Añadir como primer elemento de la lista de pares la suma realizada | |
| return l_tmp # Devolver la lista de pares modificada |
Hola, yo lo que hice fue crear una "nueva" lista a la que le agregue los elementos pares, y al final, la renombre como la lista original
nueva_lista = []
for i in lista:
if i%2 ==0:
nueva_lista.append(i)
lista = nueva_lista
Hola, yo realice esto:
def modificar(lis):
lst = list(set(lis))
lst.sort(reverse=True)
for l in (lst):
if l%2!=0:
lst.remove(l)
suma = sum(lst)
lst.insert(0,suma)
return lst
lista_sin_impares = [num for num in lista_ordenada if num % 2 == 0]
Buenas,
También se podría corregir en el bucle for restando uno al contador cada vez que borremos, así volveremos a testear la sentencia IF del elemento que ha reemplazado al borrado en la lista:
for v,i in enumerate(lista):
if i%2==0:
lista.remove(i)
v=v-1
Esta es mi propuesta de código. No sabía que al hacer un list(set()) mantenía intacta la lista original, por eso usé copy()
def modificar(lista):
l = lista.copy() # crear duplicado de lista recibida
# transformar en set para eliminar duplicados
l = list(set(l)) # transformar a lista
l.sort(reverse=True) # para ordenar elementos.
l2 = [] # crear nueva lista con elementos pares
for i in l:
if i % 2 == 0: # si elemento i es par
l2.append(i) # se agrega a nueva lista l2
num = sum(l2) # al finalizar la creación de la nueva lista, se suman los valores de la misma
l2.insert(0,num) # insertar la suma como primer valor de nueva lista
print(f'La nueva lista es: {l2}') # imprimir nueva lista
print(f'{l2[0]} es igual a la suma de {l2[1:]}') # explicar de donde proviene el priver valor
print(l2[0]==sum(l2[1:])) # validar que la igualdad se cumple
modificar(lista)
Yo lo hice asi, cumple y lo hice usando solo una lista, pero no se si puedo hacerlo asi:
Completa el ejercicio aquí
lista = [29, -5, -12, 17, 5, 24, 5, 12, 23, 16, 12, 5, -12, 17]
def modificar(lst):
lista_modificada = lst.copy()
contar = 0
sumar = 0
while True:
try:
if lista_modificada.count(lista_modificada[contar]) > 1:
lista_modificada.remove(lista_modificada[contar])
elif lista_modificada[contar] % 2 != 0:
lista_modificada.remove(lista_modificada[contar])
else:
contar += 1
except:
break
lista_modificada.sort(reverse=True)
for numero in lista_modificada:
sumar += numero
lista_modificada.insert(0,sumar)
return lista_modificada
valor = modificar(lista)
resultado = None
verificacion = 0
contar = 1
for i in valor:
if i == valor[0]:
resultado = i
else:
verificacion += i
contar += 1
if contar == len(valor):
if verificacion == resultado:
print("Correcto")
else:
print("Valor erroneo")
Yo lo hice asi, cumple y lo hice usando solo una lista, pero no se si puedo hacerlo asi:
Completa el ejercicio aquí
lista = [29, -5, -12, 17, 5, 24, 5, 12, 23, 16, 12, 5, -12, 17]
def modificar(lst): lista_modificada = lst.copy()
contar = 0 sumar = 0 while True: try: if lista_modificada.count(lista_modificada[contar]) > 1: lista_modificada.remove(lista_modificada[contar]) elif lista_modificada[contar] % 2 != 0: lista_modificada.remove(lista_modificada[contar]) else: contar += 1 except: break lista_modificada.sort(reverse=True) for numero in lista_modificada: sumar += numero lista_modificada.insert(0,sumar) return lista_modificadavalor = modificar(lista) resultado = None verificacion = 0 contar = 1
for i in valor: if i == valor[0]: resultado = i
else: verificacion += i contar += 1 if contar == len(valor): if verificacion == resultado: print("Correcto") else: print("Valor erroneo")
Ahora usando los metodos de python, lo simplifique asi:
lista_modificada = []
def modificar(lst):
lista_modificada = list(set(lst))
lista_modificada.sort(reverse=True)
l_pares = []
for pares in lista_modificada:
if pares % 2 == 0:
l_pares.append(pares)
suma_total = sum(l_pares)
l_pares.insert(0,suma_total)
return l_pares
valor = modificar(lista)
print(valor[0] == sum(valor[1:]))
Otra forma de solucionar este ejercicio es, tomando la solución del vídeo, recorrer la lista del final al principio. De esa manera el índice no se corre, porque vamos recortándolo hacia la izquierda: