Mi problema:

Tengo una lista de listas. Estas listas son de longitud variable, p. [[2, 1, 5, 3], [2,4,8]

Para cada elemento de cada lista, necesito imprimir su suma con el siguiente elemento de la lista, luego los siguientes 2 elementos de la lista, hasta que imprima la suma de todos los elementos de la lista. Luego me muevo al segundo elemento de la lista y hago lo mismo hasta que llegue al último elemento de la lista.

La salida que necesito es:

Mi salida deseada:

2 + 1 = 3
2 + 1 + 5 = 8
2 + 1 + 5 + 3 = 11
1 + 5 = 6
1 + 5 + 3 = 9
5 + 3 = 8
2 + 4 = 6
2 + 4 + 8 = 14
4 + 8 = 12

Mi (mal) intento:

Lo he intentado durante horas pero no he podido acercarme. Estaba haciendo algo en la línea del código a continuación, pero me pregunto si necesito hacer una función recursiva.

for cluster in [[2, 1, 5, 3], [2,4,8]]:
  for trip in cluster:
    for trip_cluster_index in range(len(cluster)):
      if trip != cluster[trip_cluster_index]:
        print(cluster, trip, cluster[trip_cluster_index])
-1
Worm 9 oct. 2019 a las 18:37

3 respuestas

La mejor respuesta

O (n ^ 3)

list_sum = [[2, 1, 5, 3], [2,4,8]]
list_out = []
for l in list_sum: 
    for i in range(1, len(l)):
        aux = l[i-1]
        for j in range(i, len(l)):
            aux += l[j]
            list_out.append(aux)

print(list_out)

[3, 8, 11, 6, 9, 8, 6, 14, 12]

O (n ^ 2)

list_sum = [[2, 1, 5, 3], [2,4,8]]
list_out = []
for l in list_sum:
    list_1 = []
    aux = l[0]
    for i in range(1, len(l)):
        aux += l[i]
        list_1.append(aux)
    list_out.extend(list_1)

    sum_list = 0
    for j in range(0, len(list_1)-1):
        sum_list += l[j]
        list_2 = [x-sum_list for x in list_1[j+1:]]
        list_out.extend(list_2)

print(list_out)

[3, 8, 11, 6, 9, 8, 6, 14, 12]

O invertido (n ^ 3)

list_sum = [[2, 1, 5, 3], [2,4,8]]
list_out = []
for l in list_sum:   
    for i in range(0,len(l)-1):
        aux = sum(l[i:])
        list_out.append(aux)
        for j in range(len(l)-1,i+1,-1):
            aux -= l[j]
            list_out.append(aux)

print(list_out)

[11, 8, 3, 9, 6, 8, 14, 6, 12]

2
Manuel 10 oct. 2019 a las 10:43

Esto debería darte lo que quieres.

n = -1
listy =  [[1,1,1],[2,2,2],[3,3,3]]
for l in listy:
    while n < len(listy)-1:

        n +=1
        total = sum(l) + sum(listy[n])
        print(total)
1
Jeff R 9 oct. 2019 a las 15:52

Supuse que su salida debe contener todas las ecuaciones, y esto es lo que se me ocurrió:

L=[[2, 1, 5, 3], [2,4,8]]
for i in L:
    for j in range(len(i)):
        for k in range(j+2, len(i)+1):
            print(' + '.join([str(n) for n in i[j:k]]), '=', sum(i[j:k]))

Espero que sea lo que estabas buscando!

1
Michele Bastione 9 oct. 2019 a las 15:55
58307667