11
votes

Python Comment réduire plusieurs listes?

Je suis capable d'utiliser mappe et somme pour atteindre cette fonctionnalité, mais comment utiliser réduire ?

Il y a 2 listes : A , B , ils ont le même nombre de valeurs. Je veux calculer xxx

la version de travail que j'ai écrit à l'aide de mappe est xxx

Comment utiliser réduire alors? J'ai écrit: xxx

j'ai eu l'erreur " typeError:" float 'objet est désabonnement ".

Peut-on perdre une lumière sur cela?


1 commentaires

Votre Lambda prend deux tuples à deux éléments. Cela fonctionne bien lorsque vous réduisez les deux premiers éléments de votre liste, mais la prochaine réduction fonctionnera à la suite de votre Lambda (qui est un flotteur) et l'élément suivant de la liste (qui est un tuple) et votre Lambda peut 't gérer cela. Votre Lambda doit prendre un numéro et un tuple et semer le numéro avec une valeur initiale (comme la réponse d'Antonakos »).


6 Réponses :


8
votes

Le premier argument de la fonction Lambda est la somme jusqu'à présent et le deuxième argument est la prochaine paire d'éléments: xxx


0 commentaires

7
votes

Je le ferais de cette façon (je ne pense pas que vous avez besoin de Lambda) ... XXX

Cela semble également légèrement plus explicite. Zip AB, multipliez-les et résumez les termes.


1 commentaires

+1, bien que somme (x * y pour x, y dans zip (a, b)) serait aussi bien



8
votes

une solution utilisant Réduire et mappe , xxx


0 commentaires

1
votes

Des difficultés à réduire l'activité lorsque vous avez une carte incorrecte.

Prenons l'expression: valeur = somme (carte (Lambda (x, y): x * y, zip (a, b)))

carte est la transformation. Nous en avons besoin pour convertir les tuples en plats simples . Dans votre cas, il ressemblera à: xxx

puis, si vous souhaitez exprimer somme via Réduire - il On ressemblera à: xxx

donc, voici exemple : xxx


0 commentaires

1
votes

On dirait que vous voulez un produit intérieur. Utilisez un produit intérieur. https://docs.scipy.org/doc/numpy/ Référence / générée / NUMPY.INNER.HTML

a = np.arange(24).reshape((2,3,4))
b = np.arange(4)
np.inner(a, b)


1 commentaires

Il est bon que vous mentionniez "produit intérieur", car cela nous donne des antécédents mathématiques et conceptuels.



1
votes

une mise à jour forte> sur la réponse acceptée forte> (by @antonakos):

La possibilité de déballer les paramètres de tuple a été supprimée dans Python 3 Strong> .x p>

donc la solution p> xxx pré>

peut vous donner une erreur de syntaxe: p> xxx pré>

à Travaillez sur Python 2.x et 3.x Strort>, vous pouvez Déballez manuellement le tuple fort> à la place: P>

from functools import reduce
a = [1,2,3]
b = [1,4,8]
value = reduce(lambda sum, xy: sum + xy[0]+xy[1], zip(a,b), 0)
print("result:", value)


0 commentaires