L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]]
a = 0
for i in L[len(L)-2]:
a = L[0][i] * L[1][i]
I wish to multiply this so that it becomes. This wont work for more than 2 values(a = 0.9 x 0.5 x 1.1 + 0.7 x 0.6 x 1.2 = 0.999). Basically given a list of list each with same size multiply it.without imports
8 Réponses :
Quelque chose comme ceci:
L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]] a = (1, 1) for i in L: a = (a[0] * i[0], a[1] * i[1]) print(a)
qui donne
(0.49500000000000005, 0.504)
ceci est une version que vous pouvez utiliser pour les listes et sous-listes de longueur arbitraire:
for p in zip(*L):
print(p)
# (0.9, 0.5, 1.1)
# (0.7, 0.6, 1.2)
comme demandé ceci est une version sans importations:
s = 0
for items in zip(*L):
prod = 1
for factor in items:
prod *= factor
s += prod
la manière générale:
reduce comme ceci:
0.999
résultat:
total = sum(reduce(operator.mul,terms,1) for terms in zip(*L))
pour la somme utilisons somme :
[0.49500000000000005, 0.504]
donne approximativement:
from functools import reduce import operator L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]] result = [reduce(operator.mul,terms,1) for terms in zip(*L)]
Vous pouvez obtenir les paires que vous voulez en échangeant des lignes en colonnes, ce qui est fait avec l'idiome
results = sum(product(col) for col in columns)
Ensuite, implémentez simplement un produit (analogue à sum )
import itertools
import operator
def product(iterable):
return itertools.reduce(operator.mul, iterable, 1)
# or:
# acc = 1
# for el in iterable:
# acc *= el
# return acc
Et utilisez une compréhension de liste.
columns = zip(*rows)
Implémentation naïve
L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]]
b = []
for i in range(len(L)) :
a=1
for j in range(len(L[0])):
a*=L[i][j]
b.append(a)
utiliser la programmation fonctionnelle
>>> from functools import reduce >>> def multiply(x, y): ... return x * y >>> L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]] >>> sum([reduce(multiply, item) for item in zip(*L)]) 0.9990000000000001
multiplier est juste operator.mul fyi :)
Solution possible avec numpy:
0.9990000000000001
Parcourez toutes les colonnes du tableau 2d et calculez le prod de chaque colonne. Additionnez ensuite tous les résultats.
Sortie
import numpy as np L = [[0.9, 0.7] ,[0.5, 0.6], [1.1, 1.2]] L = np.array(L) np.sum([np.prod(L[:,i]) for i in range(L.shape[1])])
Comme indiqué, vous pouvez utiliser zip pour obtenir la liste des tuple s, de la manière
k = [3,10,5] mk = mult(k[:]) print(mk) # 150 print(k) # [3,10,5]
qui pourrait être converti en liste de liste s, de la manière suivante
a = sum([mult(i) for i in L2]) print(a) # 0.9990000000000001
Ensuite, si vous utilisez Python2, vous pouvez utiliser réduire , ce qui sans import est impossible en Python3, vous devez donc implémenter vous-même la réduction de la multiplication, je le ferais de la manière suivante:
t = [9,5,3] mt = mult(t) print(mt) # 135 as you might expect print(t) # [135] i.e. list with 1 element equal to value returned by mult
Expliquez, dans vos propres mots, le raisonnement derrière la partie
len (L) -2et la multiplication. Supposons qu'il y ait 100 paires dans L; combien de valeurs devez-vous multiplier à chaque étape de multiplication et combien de ces résultats devez-vous additionner?pourquoi avez-vous ajouté sans importations ?
J'ai oublié de le mentionner
choix personnel et merci beaucoup!