El problema es la indexación. He intentado este fragmento de código:

for i in range(2,len(the_list_im_getting_values_from)):
    for j in range(0,i+1):
        index[j] = j
    for k in range(0,len(index)):
        the_output_list.append(the_list_im_getting_values_from[index[k]]*the_list_im_getting_values_from[index[k+1]])
        k += 1

, pero no funcionó totalmente.

¿Cómo resolver este problema?

Entrada de ejemplo: matriz de 3, 4 y 7

Salida de ejemplo: [12,21,28,84]

Etapas de procesamiento:

3*4=12 
3*7=21 
4*7=28 
3*4*7=84 

[12,21,28,84]
-3
h h h 7 sep. 2018 a las 18:20

3 respuestas

La mejor respuesta

Puede jugar con itertools recibo multiset. Generará algo más de las tuplas necesarias, tendrías que filtrarlas:

from itertools import chain, combinations

# see link above for credits
def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

def mult(iterab):
    """Multiply all numbers in the iterable and return result"""
    rv = 1
    for k in iterab:
        rv = rv * k
    return rv


d = [3,4,7]
k = powerset(d) # (), (3,), (4,), (7,), (3, 4), (3, 7), (4, 7), (3, 4, 7)

result = []

# we filter out anything from k thats shorter then 2
result.extend(map(mult, (x for x in k if len(x)>1))) 

print(result)

Salida:

[12, 21, 28, 84]
0
Patrick Artner 7 sep. 2018 a las 15:35

Por lo tanto, está tratando de obtener todos los productos utilizando todas las combinaciones posibles de números en su lista.

from itertools import chain, combinations
from functools import reduce

def powerset(iterable, min_subset_size=1):
    'Returns all subsets of the iterable larger than the given size.'
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(min_subset_size, len(s)+1))

def product(iterable):
    'Returns the product of all the numbers in the iterable.'
    return reduce((lambda x, y: x * y), iterable)

numbers =  3, 4, 7

Si p. 3 cuenta como producto de un solo número:

result = {product(subset) for subset in powerset(numbers)}
print(result)
Out: {3, 4, 7, 12, 84, 21, 28}

Si un producto debe ser de 2 o más números, p. 3 * 4, 3 * 4 * 7:

result = {product(subset) for subset in powerset(numbers, 2)}
print(result)
Out: {28, 12, 21, 84}
0
Denziloe 7 sep. 2018 a las 15:38

Creo que lo que quieres es el resultado de cada número multiplicado por las otras entradas de la lista. Por lo tanto, para la lista [3,4,7] desearía 9,16,49,12,21,28. Puedes probar esto.

l = [3,4,7]
s = set()
for count, num in enumerate(l):
    for each in l:
        s.add(each * l[count])

s
{9, 12, 16, 49, 21, 28}

Si no quieres los cuadrados (9,49,16) agrega

if list[count] == each:
    countinue

Debajo de la segunda para bucle

0
Patrick Artner 7 sep. 2018 a las 16:26