y a-t-il une fonction comme un Je veux faire du SEQ.SCAN () code> en python? P>
cumsum () code> ou
cumproduct () code> genre de choses sans boucle. p>
6 Réponses :
Les fonctions globales utiliseraient voir http://docs.python.org/library/fonctions.htmlled/a > Pour plus d'informations p> réduire code> plutôt que
plan code>. p>
Réduire () renvoie la valeur finale uniquement. Non la liste des valeurs intermédiaires. Donc, je peux obtenir la somme (), mais pas cumsum ()
Je ne suis pas sûr mais donnez-le à essayer plus sur ceci sur docs.python p> p>
Nope.
def scan(op, seq): it = iter(seq) result = next(it) for val in it: result = op(result, val) yield result
Vous devriez faire un résultat de rendement code> avant la boucle, sinon le résultat manquera le premier élément.
Ouais, les documents MS étaient un peu vagues quant à ce que SEQ.SCAN <> () a fait code>.
Thnx. En fait, F # SEQ.SCAN () nécessite un autre paramètre d'état initial (résultat) .. Thnx.
La solution de Ignacio est presque correcte, je pense que, mais nécessite un opérateur de type ('A ->' A -> 'A) et ne donne pas le premier élément.
('State -> 'State -> 'State) -> seq<'State> -> seq<'State>
+1, mais je céderais avant d'appliquer la première réduction. Je ne sais pas à propos de la numérisation F # ', mais Haskell renvoie l'état initial comme premier élément (qui a beaucoup de sens): scanl (+) 0 [1,2,3] # [0,1,3,6 ].
Vous pouvez utiliser une fonction d'accumulation obtenir la même fonctionnalité d'équivalent python pour numériser: Vous pouvez également utiliser RX (extension réactive) pour utiliser l'opérateur de numérisation.
C'est une bibliothèque externe. Vous devez donc l'installer avant de l'utiliser.
Avec RX, vous pouvez faire quelque chose comme ceci: P> from rx import from_, operators as op
nums=[1,2,3,4,5]
source=from_(nums).pipe(op.scan(lambda x,y:x+y))
source.subscribe(lambda num:print(num)
#prints
#1
#3
#6
#10
#15
Scan (opérateur.add, [1,2,3,4]) == [1,3,6,10] code>. Pas
mappe code> ou
Réduire code>.